2013-03-29 42 views
0

我有兩個表[basic] &​​都有一個主鍵email_id。現在我要來檢索basic表信息,但where條款應具有的兩個表搜索條件如何使用2個不同表中的where子句檢索數據

例子:

SELECT DISTINCT 
    basic.f_name, 
    basic.l_name 
FROM 
    basic 
CROSS JOIN 
    info 
WHERE 
    (basic.email_id = basic.email_id) 
    AND (basic.caste LIKE '%' + @caste + '%') 
    AND (info.diet = @diet) 

(此查詢是寫在ASP的GridView控件,但它不工作)

+5

你有basic.email_id = basic.email_id,你大概的意思basic.email_id = info.email_id。 – atw13

回答

6
SELECT basic.f_name, basic.l_name 
FROM basic INNER JOIN info ON basic.email_id = info.email_id 
WHERE (basic.caste LIKE '%' + @caste + '%') AND (info.diet = @diet) 
+2

備註 - 這不是普遍的選擇,但更多的時候,人們喜歡使用INNER JOIN ... ON作爲連接零件,WHERE作爲數據特定的過濾零件。如果人們不喜歡INNER JOIN,通常只需使用逗號作爲CROSS JOIN。 – atw13

1

當你做一個內部聯接時,你實際上是使用了一個帶有where子句的交叉聯接。在內部連接中,所有數據都被合併(笛卡爾積),然後用where子句進行過濾。因此,我認爲你的代碼會更乾淨,使用內部連接。

SELECT DISTINCT basic.f_name, basic.l_name 
FROM basic 
CROSS JOIN info 
WHERE (basic.email_id = basic.email_id) 

相當於

SELECT basic.f_name, basic.l_name 
FROM basic INNER JOIN info ON basic.email_id = info.email_id 

我認爲這能解決你的問題。

+0

非常感謝你 – user2224962

+0

我不相信'等值',但第二個查詢比第一個更合理。 CROSS JOIN很少是答案的一部分。這不是一個全面的否定;有時CROSS JOIN恰好是需要的。儘管如此,這些場合還很少。 –

0

使用INNER JOIN

SELECT DISTINCT 
    basic.f_name, 
    basic.l_name 
FROM 
    basic as basic 
INNER JOIN 
    info as info 
    ON basic.email_id = info.email_id 
WHERE 
    (basic.caste LIKE '%' + @caste + '%') 
    AND (info.diet = @diet) 
+0

非常感謝 – user2224962

相關問題