使用IF语句的MySQL SELECT从另一个表

时间:2016-05-15 14:29:56

标签: php mysql select

我希望基于某些选择条件为true来显示Table1的所有结果,并根据Table2的某些满足条件,为Table1中的每个结果设置一个变量0或1。

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  |
+-------+-----------+-----+

我希望来自SINGLE SELECT语句的SQL结果:

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

3 个答案:

答案 0 :(得分:1)

LEFT JOIN CASE 语句可能适合您。请参阅下面的查询。

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)

答案 1 :(得分:0)

我想你只想加入:

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中。

答案 2 :(得分: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'