2011-05-15 35 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 

相关问题