[英]MySQL SELECT with IF statement to set variable from another table
I want to show all the results from Table1 based on some select condition being true, and have a variable be set to 0 or 1 for each result from Table1 based on some satisfied condition with Table2. 我想显示基于某些选择条件为真的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'
How can I make this all into one SQL call? 如何将所有这些整合到一个SQL调用中?
example call I would like to see is: 我想看到的示例调用是:
Table1: 表格1:
+----+-------------------+
| ID | Name |
+----+-------------------+
| 1 | John |
+----+-------------------+
| 2 | Alan |
+----+-------------------+
Table2: So here Alan
exists AND Val='p'
, not just existing 表2:所以这里
Alan
存在并且Val='p'
,而不仅仅是存在
+-------+-----------+-----+
| TID | Name | Val |
+-------+-----------+-----+
| 1 | Alan | p |
+-------+-----------+-----+
SQL result I want from a SINGLE SELECT statement: 我想从SELECT语句获得的SQL结果:
+------+----------+
| Name | Variable |
+------+----------+
| John | 0 |
+------+----------+
| Alan | 1 |
+------+----------+
A LEFT JOIN and a CASE statement may work for you. LEFT JOIN和CASE语句可能对您有用 。 Please see query below.
请参阅下面的查询。
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)
I think you just want a 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;
In MySQL, you can simplify the SELECT
to: 在MySQL中,您可以将
SELECT
简化为:
SELECT t2.Name, (Tt2.ID IS NOT NULL) AS Variable
Note that I added the name to the SELECT
, although it is not in your sample SQL. 请注意,我将名称添加到
SELECT
,尽管该名称不在示例SQL中。
You need LEFT JOIN Table2
to include all rows from Table1
even if row in Table2
not exists. 即使
Table2
行不存在,您也需要LEFT JOIN Table2
包括Table1
所有行。 And then in Variable
column just check if Table2.TID
is presented (ie not null). 然后在“
Variable
列中,仅检查是否存在Table2.TID
(即不为null)。
SELECT Name, (Table2.TID IS NOT NULL) AS Variable
FROM Table1
LEFT JOIN Table2 ON Table2.Name=Table1.Name AND Table2.Val='p'
Or it can be done with IF()
: 或者可以通过
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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.