我有三个简化的表格,如下所示:
我要尝试的是,如果ID所附的 ITEM AND CUSTOMER (商品和客户)在表C中具有 VALUE ,则从表A中选择一个自定义布尔值B互相匹配。
下面是我当前的查询,以演示我正在尝试做的事情:
SELECT DISTINCT ID,
CUSTOMER,
ITEM,
CASE WHEN B.VALUE = C.VALUE THEN 1 ELSE 0 END AS 'VALUEMATCH'
FROM A
LEFT JOIN B
ON A.CUSTOMER = B.CUSTOMER
LEFT JOIN C
ON A.ITEM = C.ITEM
...,并且ID = 1和Item1的结果查询(例如)为:
...,我知道为什么会得到它,但是看不到解决它的明确方法,即使我可以按照我的意愿去做?
我正在寻找的结果描述如下:
答案 0 :(得分:3)
使用exists
:
select a.*,
(case when exists (select 1
from b join
c
on b.value = c.value
where b.customer = a.customer and c.item = a.item
)
then 1 else 0
end) as valuematch
from a;
答案 1 :(得分:2)
除了其他答案,看起来您可以对现有查询进行查询,将MAX函数放在ValueMatch
上,并将GROUP BY放在其他三列上。
这将是代码:
SELECT ID,
CUSTOMER,
ITEM,
MAX(CASE WHEN B.VALUE = C.VALUE THEN 1 ELSE 0 END) AS VALUEMATCH
FROM A
LEFT JOIN B
ON A.CUSTOMER = B.CUSTOMER
LEFT JOIN C
ON A.ITEM = C.ITEM
GROUP BY ID,
CUSTOMER,
ITEM
;
答案 2 :(得分:1)
您可以:
{{1}}