为什么EXCEPT功能不起作用? [重复]

问题描述 投票:-1回答:2

这个问题在这里已有答案:

我有这样的mysql查询如下:

$missingTypo = mysql_query("SELECT m.ID
                              FROM table1 AS m
                              LEFT JOIN table2 AS ut
                              ON ut.matchID = m.ID
                              WHERE data > '$now'
                          EXCEPT
                            SELECT m.ID
                              FROM table1 AS m
                              LEFT JOIN table2 AS ut
                              ON ut.matchID = m.ID
                              WHERE data > '$now' 
                              AND ut.typer = '$name'");

第一个状态查询返回3个结果[10,11,12],第二个返回1个结果[10]。整个查询的结果应该是[11,12],但它不起作用。 var_dump函数返回false。但是,如果我将“EXCEPT”交换为例如“UNION ALL”,它可以正常工作并给出[10,11,12,10]。

请帮忙。

php mysql except
2个回答
1
投票

正如另一个答案所示,Mysql不支持EXCEPT,但你可以使用NOT IN谓词:

SELECT m.ID
FROM table1 AS m
LEFT JOIN table2 AS ut ON ut.matchID = m.ID
WHERE data > '$now'
  AND m.ID NOT IN(SELECT m2.ID
                  FROM table1 AS m2
                  INNER JOIN table2 AS ut ON ut.matchID = m.ID
                  WHERE data > '$now' 
                    AND ut.typer = '$name');

或者LEFT JOIN

SELECT t1.ID
FROM
(
  SELECT m.ID
  FROM table1 AS m
  LEFT JOIN table2 AS ut ON ut.matchID = m.ID
  WHERE data > '$now'
) AS t1
LEFT JOIN
(
  SELECT m.ID
  FROM table1 AS m
  LEFT JOIN table2 AS ut ON ut.matchID = m.ID
  WHERE data > '$now' 
    AND ut.typer = '$name'
) AS t2 ON t1.ID = t2.ID
WHERE t2.ID IS NULL

0
投票

MySQL不支持EXCEPT,而是使用WHERE NOT

© www.soinside.com 2019 - 2024. All rights reserved.