我正在预订系统。一个错误允许一些单位是重复预订。
使用Microsoft SQL Server 2012 Express
IE,单位x是为具有相同checkIn日期的两个客户预订的。
错误已修复,但我想检查是否有任何单位确实重复预订。
我正在努力使SQL查询工作以返回这些“重复”单元。我可以在代码中使用一些例程处理这个问题,但我希望得到一个SQL查询来向我展示这些单元。
我尝试了一个连接(在同一个表上),它刚刚返回了所有单元......然后我尝试了一些子查询,但是我搞砸了一些东西......
SELECT *
FROM bookingTable as q1
WHERE (q1.unit = (SELECT unit FROM bookingTable AS q2
WHERE q2.unit = q1.unit)
AND q1.checkIn = (SELECT checkIn FROM bookingTable AS q3)
)
ORDER BY
q1.checkIn,q1.unit
ERROR:
Msg 512,Level 16,State 1,Line 2
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
答案 0 :(得分:3)
SELECT unit,checkIn,COUNT(*)
FROM bookingTable
GROUP BY unit,checkIn
HAVING COUNT(*) > 1
会告诉您哪个unit
和checkIn
值的组合出现在多行中。
如果需要,您可以使用它来查看各行:
SELECT bt.*
FROM bookingTable bt
INNER JOIN (
SELECT unit,checkIn,COUNT(*) as cnt
FROM bookingTable
GROUP BY unit,checkIn
HAVING COUNT(*) > 1
) t
ON bt.unit = t.unit and
bt.checkIn = t.checkIn