所以我正在尝试编写一个查询来提取一些数据,我有一个需要满足的条件,我似乎无法弄清楚如何实际执行它。我想要实现的是,如果一列中的列不为空,那么我想检查另一个表,看看这些列中是否存在特定值。所以在psuedo代码类型的方式我试图这样做
SELECT id, user_name, created_date, transaction_number
FROM TableA
WHERE (IF TableA.response_id IS NULL OR
IF (SELECT type_id from TableB WHERE (type_id NOT IN ('4)) AND (id = TableA.response_id))
所以从这里我要做的就是为那些没有响应的客户提取所有交易,但是那些确实有响应的人我仍然想要获取没有与之关联的特定代码的交易。我不确定是否可以这样做,或者如果我需要创建一些可以被操作的临时表,但我仍然坚持这一条件。
答案 0 :(得分:1)
起初我以为你想从问题的措辞中得到CASE
声明,但我认为你只是在找OUTER JOIN
OR
声明:
SELECT DISTINCT a.id, a.user_name, a.created_date, a.transaction_number
FROM TableA A
LEFT JOIN TableB B ON A.response_id = B.Id
WHERE A.response_id IS NULL
OR B.type_id NOT IN (4)
答案 1 :(得分:0)
其中TableA.Response_id为null或(从TableB中选择count(1)WHERE(type_id NOT IN('4))AND(id = TableA.response_id))= 0
如果您的子查询在逻辑上是正确的。
答案 2 :(得分:0)
嗯,我不是100%肯定我会遵循,但假设你想要的是看表A中是否有特定ID的响应条目我觉得你想要这样的东西。
SELECT a.id, user_name, created_date, transaction_number
FROM TableA a
LEFT JOIN TableB b
ON a.id=b.id
LEFT JOIN TableC c
ON a.id=c.id
WHERE isnull(b.id,c.id) IS NOT NULL
GROUP BY a.id, user_name, created_date, transaction_number
如果非空,则ISNULL将返回b.id,如果c.id不为空则返回c.id,否则返回NULL。这将告诉您TableB或TableC中是否存在对a.id的响应。这是假设TableB& TableC更像是日志。如果你说这些表肯定会有a.id的条目,那么只需要替换b.id& c.id with b。[response_column]& c。[response_column]分别。