2011-05-15 39 views
0

說我有一個MySQL表4個字段:我怎樣才能匹配(MySQL的)行的一個領域,也是另一場不匹配

ID | ONE | TWO | THREE 

我需要做的查詢,最終結果,會顯示兩行。我需要場地'ONE'來匹配。都說'小部件'。

然後,一行的字段'TWO'應該匹配'MFG',另一個字段'MFG'除外。例如:

ID | ONE | TWO | THREE 
----------------------- 
1 | WID | MFG | sthg 
2 | WID | STR | stes 

OK,也許這將幫助..

這是我到目前爲止的聲明。

SELECT * 
FROM cs_coupons 
WHERE brand='Zantac' 
    AND product='Heartburn Relief 24ct +' 
    AND type='MFG' 

UNION 

SELECT * 
FROM cs_coupons 
WHERE brand='Zantac' 
    AND product='Heartburn Relief 24ct +' 
    AND type != 'MFG' 

我需要做的是對所有行進行排序,檢查每個品牌的這些匹配。

+1

聽起來像你的第二個條件是沒有意義的。在僞SQL語言中,您正在查找*所有行,其中第一列與「WID」匹配且第二列匹配(「MFG」或NOT「MFG」)*。匹配*「MFG」* ***或其他任何***基本上意味着*「任何」*。 – deceze 2011-05-15 01:00:38

+0

我需要確保一個匹配MFG,另一個只是MFG。 – 2011-05-15 01:09:02

+0

你如何確定返回哪一個MFG?假設他們是重複的 – 2011-05-15 01:11:34

回答

2
((SELECT * FROM mytable WHERE ONE='WID' AND TWO='MFG' LIMIT 1) 
UNION 
(SELECT * FROM mytable WHERE ONE='WID' AND TWO != 'MFG' LIMIT 1)); 

第一查詢返回WIG & MFG一個記錄,第二個查詢返回與WIG &!MFG一個記錄。你走了。

但我認爲你很可能誤解了這個計劃。如果WIG & MFG有多條記錄,您將無法確定選擇哪條記錄。

+0

謝謝艾哈邁德。將會有數百行將比WID多。我的目標是找到匹配字段ONE的行並確保字段TWO不匹配。所以,你是對的。我怎麼能匹配字段ONE,並確保字段TWO中的一行匹配MFG,而不是。先謝謝你。 – 2011-05-15 01:06:20

+0

sry,I ment *和另一個不匹配。 – 2011-05-15 01:12:21

+0

對不起,我無法理解你上面評論中的第二個限制。也許有人可以理解並幫助你。我的建議是你必須閱讀一本關於SQL的書。 SQL的價值只有30-40頁,但最終你會非常擅長。 – 2011-05-15 09:00:16

0

也許是這樣的:

SELECT * 
FROM cs_coupons 
WHERE ID IN (
    SELECT MIN(ID) AS ID 
    FROM cs_coupons 
    WHERE type='MFG' 
    GROUP BY brand, product 

    UNION ALL 

    SELECT (MIN(ID) AS ID 
    FROM cs_coupons 
    WHERE type != 'MFG' 
    GROUP BY brand, product 
) x 
ORDER BY brand, product, type = 'MFG' DESC 

相關問題