2011-11-21 86 views
0

我有一個相當複雜的查詢,並且遍佈整個地方的大量連接。查詢本身完美工作,通過適當的ID分組來顯示不同的值,並且我使用GROUP BY來解釋COUNT()字段,並且我有3個包含序列號的字段。搜索並返回與組中的搜索匹配的行

問題是,讓我們假設有3行共享相同的ID。每個這三列的具有三個序列號列不同的序列號,類似於下面:

Row  ID  SN1  SN2  SN3 
1  1  abc123 (null) (null) 
2  1  (null) def456 (null) 
3  1  (null) (null) xyz789 

在分組-由ID,第一行會出現在記錄集,這是很好的,但它也意味着如果我做了LIKE '%def%',該行根本不會出現。

MySQL是首先執行WHERE部分還是GROUP BY?它似乎是第一個分組,這就是爲什麼只有一個LIKE '%abc%'工作。有什麼方法可以交換這個訂單嗎?

真正的查詢是60行,所以我不想粘貼它,但會,如果它是絕對必要的。

回答

1

WHEREGROUP BY之前被應用。

如果要先篩選,然後使用WHERE條件進行篩選。 如果您想先GROUP BY,然後過濾,使用HAVING子句。

如果您想要結果中的所有序列號,則可以在聚合階段使用SELECT GROUP_CONCAT(SN1) AS all_sn1。有關本手冊中的GROUP_CONCA的更多信息。

如果您想要將一列中所有三列的所有序列號連接在一起。一種可能的方式:

SELECT COALESCE(GROUP_CONCAT(SN1) || ' ', '') 
    || COALESCE(GROUP_CONCAT(SN1) || ' ', '') 
    || COALESCE(GROUP_CONCAT(SN1), '') 

可能有一個尾隨。 Trim如果你在意。

+0

謝謝,這讓我走上了正確的道路。不知何故,我忽略了這個功能(正如我以前使用過的那樣)......我希望能夠進行精確匹配搜索,但寧願它正在工作:) +1 – David