Select 如果存在则使用 WHERE,否则不使用 WHERE

Select using WHERE if any exist, else don't use WHERE

我想 select 来自 table,其中列 = 'n'。如果结果有 0 行,我想删除那个条件。

一些伪sql可能是:

SELECT * FROM MY_TABLE
WHERE COL_A = 1 AND COL_B = 'mystring'
ELSE
    SELECT * FROM MY_TABLE
    WHERE COL_A = 1;

我只会使用任一结果中的第一行,因此也可以接受table 以某种方式对结果进行排序,使 COL_B = 'mystring' 所在的行出现在顶部。

如果每个 col_a 值没有太多值,您可以使用:

select t.*
from t
where col_a = 1
order by (case when col_b = 'mystring' then 1 else 2 end);

只使用结果集中的第一行。

假设这是 MSSQL:

SELECT
    *
FROM
    MY_TABLE
CROSS JOIN
(
    SELECT
        COUNT(*) c
    FROM
        MY_TABLE
    WHERE
        COL_A = 1
    AND
        COL_B = 'mystring'
) MY_WHERE_COUNT
WHERE (
    MY_WHERE_COUNT.c > 0 AND MY_TABLE.COL_A = 1 AND MY_TABLE.COL_B = 'mystring'
)
OR (
    MY_WHERE_COUNT.c = 0 AND MY_TABLE.COL_A = 1
)