2011-06-12 96 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是第二個表中的外鍵。