【问题标题】:PHP/MySQL Using multiple WHEREs in one SELECT queryPHP/MySQL 在一个 SELECT 查询中使用多个 WHERE
【发布时间】:2014-07-23 13:44:03
【问题描述】:

我有 2 张桌子。

表 A:trades:其中包含以下列:tradeID、tradeName、tradeShow 和 tradeGuy。

表 B:offer:其中包含以下列:tradeID、offerName、offerGuy。

我正在尝试从表 A(交易)中选择所有列,其中“tradeShow”的值 = 'Yes',以及“tradeGuy”的值 != 用户的用户名。这很容易,但我不想选择任何有用户创建的报价的记录。换句话说,在表 B(报价)中,offerGuy != Username WHERE trade ID from Table B = tradeID from Table A.

但是,如何合并这两个条件?我试过这个:

$sql = "SELECT *
FROM trades t1
JOIN offers t2 
ON (t1.tradeID = t2.tradeID)
WHERE t1.tradeShow='Yes' AND t1.tradeGuy!='$username' AND t2.offeringGuy!='$username'";

但问题在于它只从有报价的交易中选择记录,因为第四行:ON (t1.tradeID = t2.tradeID),因为它只选择在(报价)中有提及其交易 ID 的记录的交易。


我还尝试了一个尴尬的尝试,通过向每个表添加一个默认值为“XXX”的“链接器”列,用一个无意义的链接链接这两个表,然后这样做:

$sql = "SELECT *
FROM trades t1
JOIN offers t2 
ON (t1.linkerA = t2.linkerB)
WHERE t1.tradeShow='Yes' AND t1.tradeGuy!='$username' AND (t2.offeringGuy!='$username' WHERE t1.tradeID=t2.tradeID)";

但问题在于使用 2 Where 子句... 那么,如何合并这两个条件?

【问题讨论】:

    标签: php mysql sql join where-in


    【解决方案1】:

    您要查找的内容称为 OUTER JOIN(在本例中为 LEFT OUTER JOIN),它将为您提供缺失匹配的空结果,例如;

    SELECT *
    FROM trades t1
    LEFT OUTER JOIN offers t2 
      ON t1.tradeID = t2.tradeID AND t2.offeringGuy = '$username'
    WHERE t1.tradeShow='Yes' AND t1.tradeGuy!='$username' AND t2.offeringGuy IS NULL
    

    我们向 LEFT JOIN 添加一个条件,我们只对匹配 t2.offeringGuy = '$username' 感兴趣,如果没有匹配项,它将在 t2 的字段中返回 NULL 值。

    然后我们只检查 t2.offeringGuy IS NULL 以找到不匹配的。

    【讨论】:

    • 非常感谢!我已经盯着这个看很久了,试着想一个答案,然后从一个问题跳到另一个问题。再次感谢!
    【解决方案2】:

    我会使用not exists 而不是明确的join

    SELECT *
    FROM trades t 
    WHERE t.tradeShow = 'Yes' AND t.tradeGuy <> '$username' and
          not exists (select 1
                      from offers o
                      where t.tradeID = o.tradeID and o.tradeGuy = '$username'
                     );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      相关资源
      最近更新 更多