2010-06-21 56 views
0

herehere如何確定MySQL查詢是否有效?

有了上面的答案,我已經提出了這個查詢,是否有效?如果不是,我該如何糾正它?

SELECT *, 
FROM TABLE_2 t 
WHERE EXISTS(SELECT IF(column1 = 'smith', column2, column1)  
FROM TABLE_1 a 
WHERE 'smith' IN (a.column1, a.column2) 
     AND a.status = 1    
       AND ('smith' IN (t.column1, t.column2) 
       ) 
+0

下面的答案使它看起來這個問題是相當甚至當有人問太廣,所以它是有道理的,現在要暫時擱置。 – halfer 2017-08-23 18:05:55

回答

1

首先,select *之後的逗號不屬於。其次,你別名你的表(table_2 ttable_1 a),但是你不會一致地使用別名,所以你在運行時可能會遇到問題。另外從維護的角度來看,我認爲大多數人更喜歡在聲明時使用別名,否則不會使用別名。

第三,你在外部選擇('smith' in (t.column1, t.column2))中的t表格中進行了一個比較,看起來沒有必要。你可以在外部選擇中做到這一點。換句話說,你可以將該終端移到AND ('smith'之前...

至於它是否有效 - 我不知道,因爲我不知道你在做什麼。

結合起來,這將留給你:

SELECT t.* 
FROM TABLE_2 t 
WHERE EXISTS (SELECT IF(a.column1 = 'smith', a.column2, a.column1)  
       FROM TABLE_1 a 
       WHERE 'smith' IN (a.column1, a.column2) 
       AND a.status = 1) 
AND ('smith' IN (t.column1, t.column2) 
+0

我很困惑SELECT IF(a.column1 ='smith',a.column2,a.column1)。 Im實際上試圖做的是,如果有一行,在column1或column2中有'smith',那麼不選擇該列,而是選擇與table1中相反的列。如果你看到第一篇文章,你可以看到表格結構和我的問題。希望你能幫我解決這個問題。謝謝 - kaash1 1分鐘前 – 2010-06-21 17:16:47

+0

@moustafa:你是什麼意思「選擇與table1相對的列」? – MJB 2010-06-21 17:51:21

+0

請在我的原始文章中查看錶1和表2。我想創建一個查詢,如:「我想選擇表1中所有行,其中列1或列2中有smith,如果列1中有smith,則選擇列2中的值,如果列2中有smith ,然後選擇該行的第1列中的值,然後從表2中選擇所有包含表1列1或列2中的值的行,我們通過從表1中選擇「 – 2010-06-22 05:31:06