2012-06-18 199 views
1

可能重複:
What is the difference between Join and Union?結合SQL查詢

我們如何結合單獨的查詢到單個SQL語句?例如:

SELECT packageid FROM tblhosting WHERE id='$id' AND userid='$userid' 
SELECT id FROM tblcustomfields WHERE relid=tblhosting.packageid AND fieldname='foo' 
SELECT value FROM tblcustomfieldsvalues WHERE fieldid=tblcustomfields.id AND relid='$id' 

現在,我知道嵌套queryes的,所以我可以寫這樣的:

,但我不知道是否有更好的方法來寫這個查詢?

[UPDATE2] 這裏是不變量的一個版本,希望它更清楚這次

SELECT packageid FROM tblhosting WHERE id='$id' AND userid='$userid' 
SELECT id FROM tblcustomfields WHERE relid=tblhosting.packageid AND fieldname='foo' 
SELECT value FROM tblcustomfieldsvalues WHERE fieldid=tblcustomfields.id AND relid='$id' 

這裏我只在tblcustomfieldvalues.value

+1

這是很難當的名稱和變量在小的方面後最初發布這個問題改變,以提供一個「好」的答案。 – imm

+0

@imm現在修復它,對不起 – CuriousMind

回答

1

您可以使用INNER or LEFT JOIN爲根據您的需要。

SELECT c.value 
    FROM tblhosting a INNER JOIN tblcustomfields b 
      ON b.relid = a.packageid 
     INNER JOIN tblcustomfieldsvalues c 
      ON c.fieldid = b.id 
WHERE a.id = '$id' AND 
     a.userid = '$userid' AND 
     b.fieldname = 'foo' 
+0

這個查詢工作正常,但事實上,它返回多個不同的記錄,但如果我運行3seperate查詢,它會返回我一個唯一的記錄。 – CuriousMind

+0

我已經更新了答案。我刪除了兩列,因爲你只需要這個列:'tblcustomfieldvalues.value'對嗎? –

0

興趣,如果你想從所有三個表中的行只有在所有三個表中存在行的情況下,這正是我所假設的,SQL看起來像這樣:

select 
    a.id, 
    b.value, 
    c.packageid 
from 
    tbcustomfields a, 
    tblcustomfieldsvalues b, 
    tblhosting c 
where 
    c.userid='$userid' 
    and a.relid=b.relid 
    and a.relid=c.packageid 
    and a.fieldname='foo' 
    and b.fieldid=c.id 
+0

請儘可能使用ANSI連接。 – Neil

1

關於什麼:

SELECT h.packageid, cf.id, cfv.value 
FROM tblhosting h 
INNER JOIN tblcustomfields cf ON (cf.relid = h.packageid) 
INNER JOIN tblcustomfieldsvalues cfv ON (cfv.fieldid = cf.id) 
WHERE h.id = '$serviceid' 
    AND h.userid = '$userid' 
    AND cf.fieldname = 'foo' 
0
SELECT 
    tblcustomfieldvalues.value 
FROM tblhosting 
    LEFT JOIN tblcustomfields 
    ON tblcustomfields.relid = tblhosting.packageid 
     AND tblcustomfields.fieldname = 'foo' 
    LEFT JOIN tblcustomfieldsvalues 
    ON tblcustomfieldsvalues.fieldid = tblcustomfields.id 
     AND relid = '$id' 
WHERE tblhosting.id = '$id' 
    AND tblhosting.userid = '$userid' 

試試這個