在DB2中有条件显示值的SQL查询
我需要通过连接3个不同的表来有条件地显示值,下面是示例数据在DB2中有条件显示值的SQL查询,db2,Db2,我需要通过连接3个不同的表来有条件地显示值,下面是示例数据 TABLE A LOCATION SITE LOCATIONID 100 DEMO 1234 10 DEMO 1050 TABLE B LOCATION PARENT SITE 100 10 DEMO TABLE C LDKEY LDTEXT LDOWNERTABLE 1234 Hello A 1050 Welco
TABLE A
LOCATION SITE LOCATIONID
100 DEMO 1234
10 DEMO 1050
TABLE B
LOCATION PARENT SITE
100 10 DEMO
TABLE C
LDKEY LDTEXT LDOWNERTABLE
1234 Hello A
1050 Welcome A
OR
TABLE C
LDKEY LDTEXT LDOWNERTABLE
1050 Welcome A
当在表A上执行Select查询时,如果其locationid(1234)在表C中有记录,则其输出应为100
Output 1
LOCATION SITE LDTEXT
100 DEMO Hello
如果表C中没有与locationid(1234)相对应的记录,则应引入其父级的LDTEXT
OUTPUT 2
LOCATION SITE LDTEXT
100 DEMO Welcome
下面是我尝试过的查询,它为我带来了100条记录和10条记录,理想情况下,它应该只为我带来100条记录,其中LDTEXT为HELLO
select * from A where (location = '100' and site = 'DEMO'
and (locationsid in (select ldkey from C where ldownertable='A' )) or
location in ( select parent from B where location = '100' and site = 'DEMO' and
locationsid in (select ldkey from C where ldownertable='A' )))
照原样试试这个。您可以取消注释注释掉的行以检查差异
WITH
A (LOCATION, SITE, LOCATIONID) AS
(
VALUES
(100, 'DEMO', 1234)
, ( 10, 'DEMO', 1050)
)
, B (LOCATION, PARENT, SITE) AS
(
VALUES
(100, 10, 'DEMO')
)
, C (LDKEY, LDTEXT, LDOWNERTABLE) AS
(
VALUES
(1050, 'Welcome', 'A')
--, (1234, 'Hello', 'A')
)
SELECT A.LOCATION, A.SITE, COALESCE(C1.LDTEXT, C2.LDTEXT) LDTEXT
FROM A
LEFT JOIN
(
B
JOIN A A2 ON A2.LOCATION = B.PARENT
) ON B.LOCATION = A.LOCATION
LEFT JOIN C C1 ON C1.LDKEY = A.LOCATIONID
LEFT JOIN C C2 ON C2.LDKEY = A2.LOCATIONID
WHERE A.LOCATION = 100
;
什么是不起作用的查询?你尝试了什么?@data\u henrik谢谢你的回复!我已经添加了我尝试的查询。请看CASE语句