使用And运算符和运算符SQL进行内部联接

时间:2013-06-13 17:32:45

标签: sql sql-server sql-server-2008

我正在寻找一个有两个运算符条件的查询,比方说,我现在在表a和表中有3列,我希望看到结果好像(a.id = b.id或a.cid = b .cid)和(a.site = b.site)

表a

ID|CID|SITE
 1| 2 |sss
 2| 3 |ddd
 3| 4 |ddd

表b

ID|CID|SITE
 1| 2 |sss
 3| 3 |ddd
 3| 5 |sss

现在结果应该显示,

ID|CID|SITE
 1| 2 |sss
 3| 3 |ddd

这意味着如果(a.id = b.id AND a.site = b.site)或(a.cid = b.cid AND a.sit = b.site)

请帮帮我......

3 个答案:

答案 0 :(得分:3)

虽然您没有指定从哪个表中获取结果,但您的示例输出表明您要从表b中获取它,因此:

 Select * From tableb b 
 Where exists
    (Select * From tablea
     Where site = b.site
        And (id = b.id or 
             cid = b.cid))

答案 1 :(得分:1)

这个怎么样?

SELECT a.id,a.cid,a.site
FROM a
JOIN b ON a.id=b.id AND a.site=b.site
UNION ALL
SELECT a.id,a.cid,a.site
FROM a
JOIN b ON a.cid=b.cid AND a.site=b.site

或者也许这个?

SELECT a.id, a.cid, a.site
FROM a JOIN b on a.site=b.site
WHERE a.id=b.id OR a.cid=b.cid

答案 2 :(得分:0)

我不确定我是否理解你的问题,你的意思是:

a.d=b.id or a.cid=b.cid

假设你用a.d表示a.id然后你试图加入两个表的ID。我宁愿为你解释SQL内部联接,然后你可以尝试使用它。

SQL Server中有3种类型的连接,内部,外部和两者(完整)。我认为你需要内联。

Inner Join为表A中的每条记录返回表B中的所有匹配记录。

SELECT * FROM TABLEA ta INNER JOIN TABLEB tb on tb.ID = ta.ID

确保您了解如果任一表中存在重复记录,则联接将返回重复记录。