提问者:小点点

MySQL SELECT with IF语句设置另一个表中的变量


我想显示基于某个选择条件为true的表1中的所有结果,并根据表2的某个满足条件将表1中的每个结果设置一个变量为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  |
+-------+-----------+-----+

要从单个SELECT语句获得的SQL结果:

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

共2个答案

匿名用户

左联接和大小写语句可能适用于您。请参阅下面的查询。

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)

匿名用户

我想你只是想加入:

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