2012-02-14 76 views
0

如果我有,我从一份声明中选定的ID列表PHP/SQL语句重复查询

SELECT id FROM myTable WHERE name = 'TEST' 

这将返回刚才的ID(1001,1002,1003等)然后我想执行另一个SELECT语句来检索所有这些ID的所有标题。

SELECT title FROM myTable2 WHERE id = XXXX 

table2中的id是table2的外键。 myTable中的id是主键。我怎样才能从这些ID检索所有的标题。我正在考虑将第一个select语句的所有结果存储在数组中,然后使用while循环遍历列表并将每个结果返回到另一个数组,但是我担心数据库变大时返回1000行,可能会造成一些不良开销。所以在PHP或SQL中,执行此操作的最佳方式是什么?

回答

4

您可以使用子查询:

SELECT title 
FROM myTable2 
WHERE id IN (
SELECT id 
    FROM myTable 
    WHERE name = 'TEST' 
) 

另一种方式来做到这一点会成为使用JOIN,避免子查询:

SELECT title 
FROM myTable2 
LEFT JOIN myTable 
ON myTable.id = myTable2.id 
WHERE myTable.name = 'TEST' 
+0

'INNER JOIN'更适合任务 – zerkms 2012-02-14 04:18:11

+0

但是,LEFT JOIN通常比INNER更有效,并且myTable.name上的WHERE条件阻止返回myTable中不存在myTable中的任何行。 – 2012-02-14 04:19:14

+0

如果其他内容相同,INNER JOIN'总是**比'LEFT JOIN'更高效 – zerkms 2012-02-14 04:19:50

-1

同时选择:

SELECT id, title FROM mytable WHERE name="TEST" 

或选择整行

SELECT * FROM mytable WHERE name="TEST" 

如果两个表要从中选择:

SELECT id, title FROM mytable A JOIN mytable2 B USING (id) 
+0

'(*)'是不是一个有效的SQL语法 – zerkms 2012-02-14 04:17:27

+0

你是对的,固定 – JimmyBanks 2012-02-14 04:18:57

+0

,您最近一次的查询可能会抛出一个错误约隐约指定的列名 – zerkms 2012-02-14 04:19:09

1

你应该只能够在同一时间进行选择。

SELECT a.id, b.title 
    FROM myTable a, myTable2 b 
    WHERE a.name = 'TEST' AND b.id = a.id;