为什么 EXCEPT 功能不起作用?
Why EXCEPT function doesn't work?
我有 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'");
第一个状态查询returns 3 个结果[10,11,12],第二个return1 个结果[10]。整个查询的结果应该是 [11, 12] 但它不起作用。 var_dump 函数 return 错误。
但是,如果我将 "EXCEPT" 交换为例如 "UNION ALL" 它工作正常并给出 [10, 11, 12, 10].
请帮忙。
MySQL 不支持 EXCEPT,请改用 WHERE NOT
正如其他答案所建议的那样,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
我有 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'");
第一个状态查询returns 3 个结果[10,11,12],第二个return1 个结果[10]。整个查询的结果应该是 [11, 12] 但它不起作用。 var_dump 函数 return 错误。 但是,如果我将 "EXCEPT" 交换为例如 "UNION ALL" 它工作正常并给出 [10, 11, 12, 10].
请帮忙。
MySQL 不支持 EXCEPT,请改用 WHERE NOT
正如其他答案所建议的那样,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