如果另一个表中存在值,则从表中选择全部

时间:2016-02-09 17:33:30

标签: php mysql sql

我有两个具有以下结构的表。

Table A

Name, Address, City, State, enterDate
James, 112 Main St, San Diego, CA, 20150224
Steve, 445 Josh St, Chicago, IL, 20150224
Dave, 158 Dove Way, San Diego, CA, 20150325


Table B

    Name, Address, City, State, JobName
    James, 112 Main St, San Diego, CA, job7
    Steve, 445 Josh St, Chicago, IL, job7
    Mark, 285 Jake LN, San Diego, CA, job7 

我想做的是从表A中选择一切,使用在20150224和20150223之间的enterDate但仅当地址和城市匹配表B中的地址和城市时。

我目前正在进行查询以从表A中选择所有,其中输入日期在20150224和20150223之间。然后我循环遍历它们并执行查询检查表B中是否存在日期。我知道这样做效率不高且速度慢。

有没有一种有效的方法呢?如果是这样,语法会是什么样的?

1 个答案:

答案 0 :(得分:2)

您可以使用EXISTS

SELECT Name, Address, City, State, enterDate
FROM tableA AS t1
WHERE enterDate BETWEEN '20150223' AND '20150224' AND 
      EXISTS (SELECT 1
              FROM tableB AS t2
              WHERE t1.Name = t2.Name AND 
                    t1.Address = t2.Address AND
                    t1.City = t2.City AND
                    t1.State = t2.State)

此查询从tableA中选择一行,如果:

  • enterDate介于2015年2月23日至2015年2月24日
  • tableB中存在具有相同NameAddressCityState字段的相应记录。