我有一条SQL语句,由于它有重复项,因此必须检查行中的条件。
Condition1
的目的是观察tb1
中一列的值是否在tb2
两列中的两个值之间,但仅在内部有'Y'的行上。
我有这样的东西:
SELECT DISTINCT
tb1.columnA, tb1.columnB, tb2.columnA, tb2.columnB,
CASE
WHEN tb1.col1 = 'Y'
THEN CONCAT(tb1.col2,tb2.col2)
ELSE 'no changes'
END as conditionColumn
FROM
tb1 left outer join tb2 on tb1.columnX tb2.columnX
WHERE
CASE
WHEN tb1.col1 = 'Y'
THEN Condition1
ELSE Condition2
END
从我之前所见,where子句中不允许使用case语句? 那我该如何处理呢?
编辑
当我在tb1.col1中输入'Y'时 where子句应向我输出在tb1.columnA中指定的ID,并且仅输出tb1.ColumnB中的值在tb2.columnA和tb2.columnB之间的行。如果里面没有Y字样,只需给我ID
所以我用了它,但是它给了我一个语法错误:
SELECT DISTINCT
tb1.columnA, tb1.columnB, tb2.columnA, tb2.columnB,
CASE
WHEN tb1.col1 = 'Y'
THEN CONCAT(tb1.col2,tb2.col2)
ELSE 'no changes'
END as conditionColumn
FROM
tb1 left outer join tb2 on tb1.columnX tb2.columnX
WHERE
CASE
WHEN tb1.col1 = 'Y'
THEN tb1.columnA = 'MyID'
AND tb1.columnB BETWEEN tb2.columnA and tb2.columnB
ELSE tb1.columnA = 'MyID'
END
答案 0 :(得分:0)
您似乎对WHERE
子句的目的感到困惑...
WHERE
子句的全部作用是确定是否返回给定的行。它无法更改返回的数据。
要更改数据,您需要在所选列中使用CASE
...
类似的东西...
SELECT DISTINCT
CASE
WHEN tb1.col1 = 'Y'
AND tb1.columnB BETWEEN tb2.columnA and tb2.columnB
then 'MyID'
ELSE tb1.columnA
END as newColumnA,
tb1.columnB, tb2.columnA, tb2.columnB,
CASE
WHEN tb1.col1 = 'Y'
THEN CONCAT(tb1.col2,tb2.col2)
ELSE 'no changes'
END as conditionColumn
FROM
tb1 left outer join tb2 on tb1.columnX tb2.columnX
答案 1 :(得分:0)
如果您想这样做
WHERE
CASE
WHEN tb1.col1 = 'Y'
THEN Condition1
ELSE Condition2
END
然后,可能您想要的是这个
WHERE
( tb1.col1 = 'Y' AND Condition1 )
OR ( tb1.col1 <> 'Y' AND Condition2 )