2016-05-15 52 views
0

我想基於某些選擇條件爲真來顯示來自表1的所有結果,並且基於某些滿意,對於來自表1的每個結果將變量設置爲0或1條件與表2。MySQL選擇IF語句來設置另一個表的變量

SELECT * FROM Table1 WHERE Some_Condition=true 

Foreach Table1.Name 
    SELECT IF(TID IS NULL, 0, 1) AS Variable FROM Table2 
    WHERE 
     Table2.Name=Table1.Name AND Table2.Val='p' 

如何使這一切成爲一個SQL調用?

例如呼叫我想看到的是:

表1:

+----+-------------------+ 
| ID |  Name  | 
+----+-------------------+ 
| 1 |  John  | 
+----+-------------------+ 
| 2 |  Alan  | 
+----+-------------------+ 

表2:所以在這裏Alan存在和Val='p',而不僅僅是現有

+-------+-----------+-----+ 
| TID | Name | Val | 
+-------+-----------+-----+ 
| 1 | Alan | p | 
+-------+-----------+-----+ 

SQL結果,我想從SINGLE SELECT語句:

+------+----------+ 
| Name | Variable | 
+------+----------+ 
| John |  0 | 
+------+----------+ 
| Alan |  1 | 
+------+----------+ 

回答

1

A LEFT JOINCASE聲明可能適合您。請參閱下面的查詢。

SELECT A.Name AS item, (CASE WHEN B.Val='p' THEN 1 ELSE 0 END) AS Variable 
FROM Table1 A LEFT JOIN Table2 B ON (A.Name=B.Name) 
+0

我會嘗試這一點,並讓你知道結果。我認爲這就是我正在尋找的。 A表中的實際查詢有點複雜,但我會嘗試將此解決方案合併到它中。 – Bob2u

+0

謝謝,這做了我想要的!我之前沒有使用CASE,謝謝你教我新東西;) – Bob2u

+0

不客氣!如果您有任何問題,請隨時與我聯繫。 – josemr

0

我覺得你只是想要一個JOIN:

SELECT t2.Name, IF(Tt2.ID IS NULL, 0, 1) AS Variable 
FROM Table2 t2 JOIN 
    Table1 t1 
    ON t2.Name = t1.Name 
WHERE t2.Val = 'p' AND <some condition on t1> = true; 

在MySQL中,可以簡化SELECT到:

SELECT t2.Name, (Tt2.ID IS NOT NULL) AS Variable 

請注意,我說的名字到SELECT,雖然它不是在你的示例SQL中。

0

您需要LEFT JOIN Table2包括來自Table1即使排Table2不存在的所有行。然後在Variable列中檢查是否存在Table2.TID(即非空)。

SELECT Name, (Table2.TID IS NOT NULL) AS Variable 
FROM Table1 
    LEFT JOIN Table2 ON Table2.Name=Table1.Name AND Table2.Val='p' 

也可與IF()做到:

SELECT Name, IF(Table2.TID IS NULL, 0, 1) AS Variable 
FROM Table1 
    LEFT JOIN Table2 ON Table2.Name=Table1.Name AND Table2.Val='p'