【问题标题】:MySQL SELECT with IF statement to set variable from another tableMySQL SELECT 与 IF 语句从另一个表设置变量
【发布时间】:2016-05-15 14:29:55
【问题描述】:

我想根据某些选择条件为真显示 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    |
+------+----------+

【问题讨论】:

    标签: php mysql select


    【解决方案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)
    

    【讨论】:

    • 我会试试这个,让你知道结果。我想这就是我一直在寻找的。 A表的实际查询要复杂一些,但我会尝试将这个解决方案合并到其中。
    • 谢谢,这就是我想要的!我以前没用过 CASE,谢谢你教我一些新东西 ;)
    • 不客气!如果您有任何问题,请随时与我联系。
    【解决方案2】:

    我想你只是想要一个 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;
    

    在 MySQL 中,您可以将SELECT 简化为:

    SELECT t2.Name, (Tt2.ID IS NOT NULL) AS Variable
    

    请注意,我将名称添加到 SELECT,尽管它不在您的示例 SQL 中。

    【讨论】:

      【解决方案3】:

      您需要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'
      

      【讨论】:

        猜你喜欢
        • 2013-03-12
        • 2012-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-05
        相关资源
        最近更新 更多