我有两张桌子。 TableA
和TableB
。这两个表都有一些包含两列的数据,如下所示。
TableA
---------
id Name
--- ----
1 abc
2 def
TableB
---------
id Name
--- ----
1 xyz
2 pqr
现在,我将从我的应用程序中传递id列表,并获得相同的ID以及它们的名称:
select id, name
from TableA
where id in(1,2)
union select id, name
from TableB
where id in(1,2);
以上查询将结果显示为:
1 abc
1 xyz
2 def
2 pqr
但我需要的是,如果两个表中都存在相同的id,则应考虑TableB的名称,但不应考虑TableA的名称。
Expected output:
1 xyz
2 pqr
还有一个是,如果TableB不包含任何数据,则应该获取TableA的数据。
我该怎么做?
谢谢!
答案 0 :(得分:5)
请尝试使用LEFT JOIN。
SELECT TableA.ID,
NVL(TableB.Name, TableA.Name) Name FROM
TableA LEFT JOIN TableB
ON TableA.ID=TableB.ID
WHERE TableA.ID IN (1, 2)
答案 1 :(得分:1)
使用简单联合尝试此查询,您可以记录
SELECT id, name from tableA where id not in (SELECT id FROM tableB)
UNION ALL
SELECT id, name from tableB
答案 2 :(得分:0)
试试这个:
select id, name from TableA where id in(1,2) and id not in ( select id from TableB) a union select id, name from TableB where id in(1,2);
答案 3 :(得分:0)
试试这个
SELECT id , name from (
select id, name from TableA where id in(1,2)
union select id, name from TableB where id in(1,2)) t
GROUP BY id;
答案 4 :(得分:0)
使用Union All,并且存在/不存在以根据table_b中是否存在任何记录来控制从table_a返回的结果
select id,name
from (
select id,name
from table_b
union all
select id,name
from table_a
where exists (select null from table_b) and
not exists (
select null
from table_b
where table_b.id = table_a.id)
union all
select id,name
from table_a
where not exists (select null from table_b))
where id in (1,2)
答案 5 :(得分:0)
如果行可以在A,A + B或B中(如果tablea
总是有数据的话,那么这样做的一种方法是,那么techdo的答案会更好):
select id, name
from (select id, name, row_number() over (partition by id order by rnk) rn
from (select id, name, 1 rnk from tableb
union all
select id, name, 2 rnk from tablea))
where rn = 1;
答案 6 :(得分:0)
SELECT (case when B.id = A.id then b.id else a.id end) as id,
(case when B.id = A.id then b.name else a.name end) as name
FROM tableA a left JOIN tableB b ON (a.id = b.id)
答案 7 :(得分:0)
MINUS运算符 - 仅返回第一个查询返回的唯一行,但不返回第二个查询返回的唯一行:
WITH tab_a AS
(
SELECT 1 id, 'abc' val FROM dual
UNION
SELECT 2, 'def' FROM dual
),
tab_b AS
(
SELECT 1, 'xyz' val FROM dual
UNION
SELECT 2, 'pqr' FROM dual
)
-- This is your query --
SELECT * FROM tab_b
MINUS
SELECT * FROM tab_a
/
ID VAL
----------
1 xyz
2 pqr
答案 8 :(得分:0)
以下代码用于从两个表(A + B)中选择数据,然后使用减去和连接来获取不需要的行的数据。如果要求从表A而不是表B中选择名称,则可以轻松修改代码。
override func loadView() {
self.tableview.delegate = self
self.tableview.dataSource = self
}