我有如下的 SQL 查询设计。
SELECT (THIS ITEMS)
FROM (TABLES)
WHERE(SOME CONDITION) AND NOT IN (CONDITION) AND IN (CONDITION)
但未按要求获得正确的输出,因为“输入”条件无法正常工作
我有如下的 SQL 查询设计。
SELECT (THIS ITEMS)
FROM (TABLES)
WHERE(SOME CONDITION) AND NOT IN (CONDITION) AND IN (CONDITION)
但未按要求获得正确的输出,因为“输入”条件无法正常工作
您需要一列进行比较。正确的语法是(注意column_expression
):
SELECT <select_list>
FROM <table_expression>
WHERE <column_expression> [NOT] IN (<comparison_list>)
例如,
SELECT col1, col2
FROM tab
WHERE col3 IN ('yes', 'no')
AND col4 NOT IN ('no', 'maybe')
请注意,您还可以使用单列结果集而不是静态比较列表,如下所示:
SELECT col1, col2
FROM tab
WHERE col3 IN (SELECT filterValues FROM table2)
但在这种情况下使用EXISTS
子句更为理想:
SELECT col1, col2
FROM tab
WHERE EXISTS (SELECT 1 FROM table2 WHERE filterValues = col3)
在某些情况下,您可能需要括号。
Example 1:
Select all persons who are active and have an invoice
Person->Invoice (1 to Many)
SELECT * FROM person WHERE active=1 AND person_id IN (SELECT person_id FROM invoice)
Example 2:
Select all person who are active, do not have a cat, and have an invoice
SELECT * FROM person WHERE active=1 AND person_id NOT IN (SELECT person_id FROM people_with_cats) AND person_id IN (SELECT person_id FROM invoice)