繁体   English   中英

在mySQL中减去两个查询结果

[英]Subtract two query results in 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

这就是你的方式。

   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

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

我猜 RIGHT JOIN 可以解决问题。

不完全确定您的表是什么样的,但是如果您将包含未预订数据的表连接到包含我们所有项目的表,那么您可以执行如下查询:

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

当您右连接时,它只选择您要加入的表中的项目,这些项目在要加入的表中具有匹配项。 这应该允许您选择未预订的数据。 如果这不适合您的情况,将您的疑问包含在您的问题中可能有助于我们更直接地回答您的问题。

LEFT OUTER JOIN可以解决问题

SELECT * 
  FROM TABLE1 t_1 LEFT OUTER JOIN TABLE2 t_2 
       ON t_1.AreaNo = t_2.AreaNo ;
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      |
+--------+--------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM