1

所以我正在尝试编写一个查询来提取一些数据,我有一个需要满足的条件,我似乎无法弄清楚如何实际执行它。我想要实现的是,如果一个表中的列不为空,那么我想检查另一个表并查看这些列中是否有特定值。所以以一种伪代码类型的方式,我试图做到这一点

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

因此,从这里我要做的是为没有响应的客户提取所有交易,但从那些有响应的客户中,我仍然想获取没有与他们关联的特定代码的交易。我不确定是否可以以这种方式进行操作,或者我是否需要创建一些可以操作的临时表,但我被困在这个条件上。

4

3 回答 3

1

起初我以为你想要CASE你问题的措辞中的陈述,但我认为你只是在寻找一个OUTER JOINwithOR陈述:

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)
于 2013-07-10T21:37:10.523 回答
0

好吧,我不是 100% 确定我会遵循,但假设您想要查看表 AI 中是否有特定 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 分别替换为 b.[response_column] 和 c.[response_column] 即可。

于 2013-07-10T21:50:55.493 回答
0

where TableA.Response_id is null or (select count(1) from TableB WHERE (type_id NOT IN ('4)) AND (id = TableA.response_id)) = 0

provided that your subquery is logically correct.

于 2013-07-10T21:42:05.980 回答