我希望基于某些选择条件为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 |
+------+----------+
答案 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'