2011-06-12 84 views
1

我试图执行一个SQL查询,该查询分为两部分。SQL SELECT问题

首先,我有一个查询返回10个ID列表。 但是,我想要有一个SELECT声明,其中每个这10个ID都有一个WHERE子句。

这可能吗?

我想:

SELECT * FROM tablenameWHERE id= (SELECT id FROM table_of_ids WHERE 
    tableid='1a177de1-3f25c9b7910b' OR 
    tableid='64faecca-133af807a65a' OR 
... up to 10 Ids) 

,但它返回错误,说明比1排以上的子查询返回。

请注意,table_of_ids的tableid和id列是不同的值。

有谁知道如何做到这一点? 我自己似乎处于亏损状态。

如果很重要,我使用mySQL和PHP。

干杯, 布雷特

回答

3

不是一个非常优化的查询,但你可以在不是使用=

SELECT * FROM tablename WHERE id IN (SELECT id FROM table_of_ids WHERE 
    tableid='1a177de1-3f25c9b7910b' OR 
    tableid='64faecca-133af807a65a' OR 
... up to 10 Ids) 
+0

您如何建议优化它? – Brett 2011-06-12 12:34:04

0

IN关键字替换=

select * from sometable where key in (subselect that returns one column) 
2

其更改为在()

WHERE id IN (SELECT id ...) 
0

貌似可以;

SELECT * 
FROM tablename 
    INNER JOIN table_of_ids ON table_of_ids.id = tablename.id 
WHERE table_of_ids.tableid IN (
    '1a177de1-3f25c9b7910b', 
    '64faecca-133af807a65a', 
...) 
0

不要使用“=”运算符,请使用“IN”运算符。 查看这个tutorial的例子。

0

使用IN关键字。

SELECT * FROM user WHERE Id IN(SELECT userId FROM table). 

Id是第一个表的主键,userId是第二个表中的外键。