2011-10-11 57 views
1

多张编辑:我最初的描述不是很清楚的一个,所以让我重新来过:SQL查询一个表上的联接相匹配的行

我有具有列A,B一个表X, c和我想查询表y中的内容ya = xa AND在表x中有一行其中xb =(arg1)AND xc =(arg2)AND另一行存在于x中,其中xb =(arg3)和xc = (arg4)

因此,传递值(3,4,6,12)在那里将返回a1在这个测试用例。希望这能说明问题。

|-------|----------|----------| 
| a |  b |  c | 
|-------|----------|----------| 
| 1 |  3 |  4 | 
| 1 |  6 |  12 | 
| 2 |  6 |  33 | 

回答

3

这听起来像是父 - >子表关系之间的基本1对多(1:M)连接。如果是这样,一个基本的INNER JOIN将返回父表和子表之间的所有匹配行。父列(如果包含在SELECT子句中)将为子表中的每个匹配行重复。

父级和子级之间的左外连接将返回父级和子级匹配行的所有行。如果子表中缺少ID值,则通常会返回NULL值来代替任何数据。

希望这会有所帮助。

+0

很好地解释+1 – rahularyansharma

+0

由于康纳修改了这个问题,我的答案并不完全适用。感谢那些根据原始问题进行“投票表决”的人。 –

0

左加入...?

你在问什么似乎很简单 - 你能提供一些细节(表格模式等),所以我们可以更有帮助吗?

1
Select * 
    from y 
where exists(select * 
       from x 
       where y.a = x.a 
        and x.b = 3 
        and x.c = 4) 
    and exists(select * 
       from x 
       where y.a = x.a 
        and x.b = 6 
        and x.c = 12)