[英]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.