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
)
我想 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
)