Mysql

根據測試選擇值

  • July 11, 2019

我有兩張桌子user_session_logsblacklisted_ips. 第一個用於記錄訪問日誌,第二個用於列入黑名單的 ip,並且兩個表都有一個名為 ip_address 的列。

我需要從第一個表中選擇所有列,並選擇另一個欄位“列入黑名單”,說明該訪問日誌中的 ip 是否被列入黑名單。

我使用左連接和 COUNT() 函式來計算每個 IP 地址的出現次數,但這將返回一個數字,而我只需要一個布爾值。

這是我的 SQL 程式碼:

SELECT usl.*, COUNT(blip.id) as blacklisted
FROM user_session_logs as usl
LEFT JOIN blacklisted_ips as blip ON blip.ip_address = usl.ip_address
GROUP BY usl.id

如果需要,請使用 CASE,但您可以隨時檢查 COUNT() > 0

SELECT usl.*, 
   CASE WHEN COUNT(blip.id) > 0 THEN TRUE ELSE FALSE END as blacklisted
FROM user_session_logs as usl
LEFT JOIN blacklisted_ips as blip ON blip.ip_address = usl.ip_address
GROUP BY usl.id;
SELECT usl.*,
      EXISTS( SELECT 1 FROM blacklisted_ips
                       WHERE ip_address = usl.ip_address
            ) as blacklisted
   FROM user_session_logs as usl

引用自:https://dba.stackexchange.com/questions/242636