SQL查询帮助

时间:2010-06-30 22:44:06

标签: sql

很抱歉再次发布此问题。我稍微改写了一下我的问题。

我正在尝试编写一个查询来返回表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

5 个答案:

答案 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