说我从SELECT查询中获得了一些数据。我可以稍后将其用作表格,这意味着在其他查询中使用其行和列来命名它吗?
我无法为我的生活解决这个问题。我是初学者。它只是一个表,但我无法查询工作。这就是我所拥有的:
酒店餐桌和房间餐桌(我只需要使用房间餐桌;我提到酒店只是作为理解的参考点)。
Room包含以下列:(Number,HID) - 这是一个复合主键; Number是房间的数字,HID是它所属的酒店的ID。我还有一个专栏名称。现在的问题是:
查找所有仅拥有名为OneBedroom的房间的酒店
我通过选择Room中的所有HID,然后过滤不存在(至少有一个非OneBedroom命名的房间的酒店)来尝试(并且失败),但我无法使其工作。
Room
Number HID Name
1 H1 OneBedroom
2 H2 OneBedroom
3 H1 OneBedroom
4 H1 OneBedroom
5 H2 TwoBedroom
6 H3 OneBedroom
Desired Output: HID
H1
H3
答案 0 :(得分:2)
我怀疑这样的事情会这样做
SELECT DISTINCT `hid` FROM `room` WHERE
`room`.`hid` NOT IN
(SELECT `hid` as `hid` FROM `room` WHERE `name` != "OneBedroom");
未经测试,可能是垃圾,但似乎它应该工作。基本上,内部查询会获得不是hid
s的所有OneBedroom
个房间。然后,我们会从hid
的完整列表中减去所有这些hid
。
答案 1 :(得分:1)
我按照你所描述的那样使用这样的表:
table Room
HID Number Name
----------------------------------------
1 101 OneBedroom
1 102 OneBedroom
1 103 TwoBedroom
1 201 Suite
2 101 OneBedroom
2 102 OneBedroom
2 103 OneBedroom
我假设连接到一张桌子酒店:
table Hotel
HID name
------------------
1 StayOver
2 SleepTite
现在查询:
SELECT h.name
FROM Hotel h
WHERE h.HID NOT IN (SELECT r.HID
FROM Room r
WHERE name != 'OneBedroom');
将为您提供仅有一间卧室的酒店名称列表。
在SQLite上使用示例数据。应该没事。
编辑 - 基于已编辑的问题:
SELECT h.HID . . .
而不是上面查询中的h.name。
答案 2 :(得分:1)
最简单的方法是使用group by
加having
条件count
,因此无需包含aditional子查询。
此返程酒店全部为room = "OneBedroom"
,请记住COUNT
仅计算values <> NNLL
SELECT `hid`
FROM `room`
GROUP BY `hid`
HAVING COUNT(CASE WHEN `name` != "OneBedroom" THEN 1 END ) = 0
至少有一间卧室是电话&#34; OneBedroom&#34;`
HAVING COUNT(CASE WHEN `name` = "OneBedroom" THEN 1 END ) >= 1
CASE
的默认值为NULL
,因此无需ELSE
部分