在DB2中有条件显示值的SQL查询

在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

我需要通过连接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     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语句