简体   繁体   English

MySQL SELECT和IF语句从另一个表设置变量

[英]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 JOINCASE语句可能对您有用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM