很抱歉再次发布此问题。我稍微改写了一下我的问题。
我正在尝试编写一个查询来返回表A中的行,其中表-B中找到多行,其中STATUS = 1表示来自表A的每个CID列。
因此,在此示例中,CID 100在Table-B中找到了两条记录,并且STATUS = 1.所以我想编写一个查询以从Table-A返回此行。我知道这是一个奇怪的桌子设计。请帮忙。
以下是包含样本数据的表格。
Table-A
-----------------------------------------
AID Name CID
---------------------------------------
10 test1 100
12 test1 100
13 test2 101
14 test2 101
15 test3 102
Table-B
------------------------------------
bID AID status
-----------------------------------
1 10 1
2 12 1
3 14 1
4 15 1
答案 0 :(得分:1)
尝试此查询:
SELECT TableA.CID
FROM TableA
JOIN TableB ON TableA.AID = TableB.AID
WHERE TableB.status = 1
GROUP BY TableA.CID
HAVING COUNT(*) > 1
它会为您的示例数据返回100
。
答案 1 :(得分:0)
这样的东西?
select aid,
status
from (select aid,
count(*) as cnt
from tableA
group by aid) as aggregated
left join tableB on tableB.aid = aggregated.aid
where aggregated.cnt > 1
答案 2 :(得分:0)
如果你使用SQL:
WITH tableBView AS
(
SELECT AID AS xxxAID
FROM [Table-B]
WHERE status = 1
GROUP BY AID
HAVING COUNT(*) > 0
)
SELECT *
FROM [Table-A]
WHERE EXISTS (SELECT * FROM tableBView WHERE xxxAID = AID)
答案 3 :(得分:0)
SELECT *
FROM Table-A a
WHERE a.CID IN
(
SELECT a.CID FROM Table-A a JOIN Table-B b USING (AID)
GROUP BY a.CID
WHERE b.status = 1
HAVING count(*) > 1
)
答案 4 :(得分:0)
这是一种非常冗长的方式。
在 Table-A 和 Table-B AID 匹配的行上选择 Table-A 中的所有列> Table-A 中存在多个具有相同 CID 的行: (顺便说一下,我不会在你的表/列名中使用“ - ”。请改用“_”。)
select
derived_table.AID,
derived_table.Name,
derived_table.CID
from
(select
table_A.AID,
table_A.Name,
table_A.CID,
count(table_A.CID) c
from
Table_A
inner join Table_B on (Table_A.AID = table_B.AID)
group by table_A.CID
) derived_table
where
c > 1