我正在寻找一个存储过程或一个体面的sql语句来查询FROM结果集。
所以,我在一张表中搜索与用户BOB相关的room_numbers
SELECT room_number FROM room_user WHERE user = BOB;
这会给我一些结果,如果我要从我的PDO结果集打印我的结果我会看到
Array
(
Array(
[room_number] = 10
)
Array(
[room_number] = 13
)
)
我可以获取此检索到的数据,将其内嵌到字符串中,然后再进行第二次查询:
SELECT title FROM rooms WHERE room_number IN('$roomString');
但是,我确信有一个更直接的方法,因为我已经在我的数据库中了。
任何人都知道有一个方便的程序或陈述来处理这个问题吗?
答案 0 :(得分:1)
这只是一个加入。
SELECT rooms.title, rooms.room_number FROM rooms
JOIN room_user ON
room_user.user = "BOB" AND
room_user.room_number = rooms.room_number
答案 1 :(得分:0)
一种方法是使用IN()
子查询:
SELECT title FROM rooms WHERE room_number IN (
SELECT room_number FROM room_user WHERE user = 'BOB'
);
另一个使用JOIN
:
SELECT
title
FROM
rooms JOIN room_user ON rooms.room_number = room_user.room_number
WHERE room_user.user = 'BOB';
确定它们的基准,但我怀疑JOIN
版本会更快一些。
答案 2 :(得分:0)
SELECT title FROM rooms WHERE room_number IN
(SELECT room_number FROM room_user WHERE user = BOB)
答案 3 :(得分:0)
您可以将第一个查询用作子查询:
SELECT title FROM rooms WHERE room_number IN
(SELECT room_number FROM room_user WHERE user = "BOB");
但是这个解决方案执行得非常糟糕(使用PHP执行implode
要快得多)。
另一个SO用户刚刚使用JOIN发布了一个解决方案,它可能是最好的。
答案 4 :(得分:0)
此时您可以使用子查询
SELECT title FROM rooms WHERE room_number IN(
SELECT room_number FROM room_user WHERE user = BOB
);
但是这个子查询可能需要更多的资源来进行2次单独的查询。