我有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
答案 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 |
+--------+--------+