簡體   English   中英

在mysql中選擇值,但在WHERE子句中檢查另一個數據庫

[英]Select value in mysql but check another database at clause WHERE

我正在嘗試從數據庫中選擇值,但是我需要檢查另一個數據庫中的另一個值。

我創建了此代碼,但只得到1個結果,我不知道為什么:

SELECT `id` FROM `mc_region` 
    WHERE `is_subregion` = 'false' 
        AND lastseen < CURDATE() - INTERVAL 20 DAY 
        AND (SELECT id_region FROM mc_region_flags 
                    WHERE flag <> 'expire' 
                    AND id_region = mc_region.id
            ) 
LIMIT 0, 30

我做錯了什么?

@編輯
我想我知道為什么此代碼無法正常工作。 在數據庫mc_region_flags中,並非主數據庫中的所有記錄都具有標志。

我要執行以下操作:

1º選擇第一個數據庫中的所有記錄,該記錄不在子區域中且持續時間超過20天
2º檢查第一個數據庫上是否有標記為'expire'的標志,如果是,則不將其包括在結果中。

我無法在僅1個SQL代碼中執行此操作?

@ Edit2

我創建了這段代碼來模擬FULL JOIN但似乎WHERE無法正常工作

SELECT *
    FROM mc_region AS r RIGHT OUTER JOIN
         mc_region_flags AS f ON r.id = f.id_region
UNION ALL
    SELECT * from 
        mc_region AS r LEFT OUTER JOIN 
        mc_region_flags AS f
        ON r.id = f.id_region
WHERE r.is_subregion = 'false' 
AND f.flag = 'exipre' 
AND r.lastseen < CURDATE() - INTERVAL 20 DAY

無法解決的問題

  1. f.flag不是'expire'
  2. f.lastseen時間不超過20天

結果

在內部嵌套之前,選擇add:id in(選擇...)

更新

SELECT * 
  FROM `mc_region` AS r LEFT JOIN 
       `mc_region_flags` AS f ON r.`id` = f.`id_region`
 WHERE r.`is_subregion` = 'false' AND 
       r.`lastseen` < CURDATE() - INTERVAL 20 DAY AND
       COALESCE(f.`flag`, '-') <> 'expire'
LIMIT 0, 30;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM