Where子句检查另一个表中的两列

时间:2015-09-30 11:18:40

标签: sql join where-clause where-in

由于某种原因,我很难得到这个答案。

我有两个表,table1和table2,如下所示:

表1:

ID   Location  Warehouse
1    London    Narnia
2    Cyprus    Metro
3    Norway    Neck
4    Paris     Triumph

表2:

ID   Area      Code
1    London    Narnia
2    Cyprus    Metro
3    Norway    Triumph
4    Paris     Neck

我需要先从table1中选择table1.Location所在的table2.Area table1.Warehouse位于table2.Code GIVEN THAT < / strong> table1.Location位于table2.Area。即我想要:

ID   Location  Warehouse
1    London    Narnia
2    Cyprus    Metro

我必须:

select
  1.location
, 1.warehouse
from table1 1
where 1.location in (select area from table2)
and 1.warehouse in (select code from table2)

但这不起作用,因为我需要根据第一个where子句保持true来执行第二个where子句。

我也尝试使用连接进行类似的查询,但无济于事。

有一种简单的方法吗?

3 个答案:

答案 0 :(得分:3)

使用exists

select t.location, t.warehouse
from table1 t
where exists (select 1
              from table2 t2
              where t.location = t2.area and t.warehouse = t2.code
             );

我应该指出,有些数据库支持in的行构造函数。这允许你这样做:

select t.location, t.warehouse
from table1 t
where(t1.location, t1.warehouse) in (select t2.area, t2.code from table2 t2);

答案 1 :(得分:1)

也许我错过了一些东西,但是对这两个条件的简单连接会在你的例子中给出结果:

$('#getresult').click(function() {

var parameters = {data1:'value1',data2:'value2'};

$.post("getresult.php",parameters,function(msg){ 
    console.log(msg);
},'json');

});

结果:

select t1.*
from table1 t1
join table2 t2 on t1.Location  = t2.Area 
              and t1.Warehouse = t2.Code;

Sample SQL Fiddle

答案 2 :(得分:0)

您需要使用JOIN。 我会在一段时间内设计查询:)

编辑:

SELECT
  1.location
, 1.warehouse
FROM table1 1
JOIN table2 2 ON 1.location = 2.area AND 1.warehouse = 2.code