【问题标题】:sql query join left 3 tables [closed]sql查询连接左3个表[关闭]
【发布时间】:2019-05-31 23:04:22
【问题描述】:

有些东西工作不正常,但我不明白。

我想列出表 evinvite 中的所有事件,列在 evgroups 中,日期不超过 7 天,并且在 evfeedback 表中没有任何反馈。

SELECT 
  t1.evid
FROM 
  evinvite t1
LEFT JOIN evfeedback t2 
  ON t2.evid = t1.evid
  WHERE t2.evid IS NULL AND userid ='".$uzer."' AND status=9
LEFT JOIN evgroups t3
  ON t3.evid = t1.evid
  WHERE t3.data >= DATE(NOW()) + INTERVAL -7 DAY AND t3.data <  NOW() + INTERVAL 0 DAY

【问题讨论】:

  • 你能发布你的表结构吗?
  • 你不能有2个where子句
  • 每个SELECT 只能有一个WHERE 子句。你有两个。目前还不清楚你想做什么。您可能希望在各自的ONs 中拥有来自WHEREs 的谓词。另一种选择是子查询或整个WHERE 的通用SELECT 子句。如需进一步建议,请编辑问题并将表结构添加为CREATE TABLE 语句,将示例数据添加为INSERT INTO 语句和所需的结果。

标签: mysql sql date join where-clause


【解决方案1】:

您正在混合使用 WHEREON 子句。

要过滤掉有反馈的事件,您需要WHERE 子句中的t2.evid IS NULL 条件。

此外,您可能希望在事件组上使用 INNER JOIN 而不是 LEFT JOIN

试试:

SELECT 
    t1.evid
FROM 
    evinvite t1
    LEFT JOIN evfeedback t2 
        ON t2.evid = t1.evid
        AND userid ='".$uzer."' 
        AND status=9
    INNER JOIN evgroups t3
        ON t3.evid = t1.evid
        AND t3.data >= DATE(NOW()) + INTERVAL -7 DAY
    AND t3.data >= DATE(NOW()) + INTERVAL -7 DAY
WHERE 
    t2.evid IS NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-09
    • 2015-12-11
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多