在mySQL中减去两个查询结果

时间:2014-04-14 07:12:24

标签: php mysql

我有2个查询,提供所有记录(包括预订的记录)并仅提供预订记录。我想减去这两个表,以便它只显示未预订的记录,以下是查询结果的示例:

查询1:

+--------+--------+
| Number | AreaNo | 
+--------+--------+ 
|      6 |      A |  
|      6 |      B |  
|      6 |      C |  
|      7 |      A | 
|      7 |      B | 
+--------+--------+

查询2:

+--------+--------+
| Number | AreaNo | 
+--------+--------+ 
|      6 |      B |  
|      6 |      C |   
|      7 |      B | 
+--------+--------+

期望的结果:

+--------+--------+
| Number | AreaNo | 
+--------+--------+ 
|      6 |      A |  
|      7 |      A | 
|      7 |      C | 
+--------+--------+

我知道我不能在mySQL中使用MINUS,但我不确定LEFT JOIN是否适用于这种情况。如果这不起作用,是否可以处理where子句?(如果数字匹配,则只清除匹配AreaNo的那个)。我尝试使用两个AND子句,但它不起作用。它清除了不符合任何标准的结果。我一直在做研究一个星期,没有任何作用。请帮忙,我真的很绝望。

查询1:

SELECT bookingListNo,
       areaNo 
  FROM BookingList, 
       BookingArea, 
       BookingLocation 
 WHERE bookingListNo NOT IN (SELECT bookingListNo 
                               FROM Booking 
                              WHERE bookingAreaNo IS NULL) AND 
       BookingList.bookingLocationNo = BookingLocation.bookingLocationNo AND
       BookingLocation.BookingLocationNo = BookingArea.bookingLocationNo 

查询2:

SELECT bookingListNo, 
       areaNo 
  FROM Booking, 
       BookingArea 
 WHERE Booking.bookingAreaNo = BookingArea.bookingAreaNo

4 个答案:

答案 0 :(得分:2)

你就是这样做的。

   SELECT Q1.Number, 
          Q1.AreaNo
     FROM Query1 Q1 
LEFT JOIN Query2 Q2 
       ON Q1.Number = Q2.Number AND
          Q1.AreaNo = Q2.AreaNo
    WHERE Q2.Number IS NULL AND
          Q2.AreaNo IS NULL

答案 1 :(得分:0)

查看此文章以供参考:http://www.sitepoint.com/understanding-sql-joins-mysql-database/

我猜一个正确的加入会成功。

不完全确定你的表是什么样的,但是如果你要将一个包含未预订数据的表加入到包含我们所有项目的表中,那么你可以进行如下查询:

SELECT *
FROM all_items
RIGHT JOIN unbooked_data ON all_items.item_id = unbooked_data.item_id

当您加入RIGHT时,它仅选择您正在加入的表中与要加入的表中具有匹配项的项目。这应该允许您选择未预订的数据。如果这不符合您的情况,包括您在问题中的查询可能会帮助我们更直接地回答您的问题。

答案 2 :(得分:0)

LEFT OUTER JOIN会做到这一点

SELECT * 
  FROM TABLE1 t_1 LEFT OUTER JOIN TABLE2 t_2 
       ON t_1.AreaNo = t_2.AreaNo ;

答案 3 :(得分:0)

mysql> SELECT tabl1.number,tabl1.areano FROM tabl1 LEFT JOIN tabl2 using(number,
areano) WHERE tabl2.number IS NULL; ;
+--------+--------+
| number | areano |
+--------+--------+
|      6 | A      |
|      7 | A      |
+--------+--------+