2012-10-25 107 views
0

如果我的问题不太合理,我很抱歉。让我详细解释一下这个场景。如何从一个共有一个字段值和另一个字段不同的MySQL表中抽取两行?

我有一个名为“元素”一个MySQL表。在该表中有两个MEDIUMINT字段,一个称为“user_id”,另一个称为“element_id”。

我想拔出用户(检查每一个单独一次一个),谁拥有的表element_id = 8表中的行和行与element_id = 9。

我试过下面的查询,但它不工作。有任何想法吗?

SELECT * FROM elements WHERE user_id=2 AND (element_id=8 AND element_id=9) 
+2

只要改变第二进入OR:'SELECT * FROM元素,其中USER_ID = 2 AND(element_id = 8或element_id = 9)' –

+0

打我吧! @AleksG – TerryProbert

+0

比方说,我有另一个用户在那里与“USER_ID” = 3,“element_id” = 8的单排。该用户在该表中没有“element_id”= 9的行。如果我运行了建议的查询,但用user_id = 3,则会有一个有效的结果。我不想要这个。我只希望结果是有效的,如果用户有两行,而不是一个或另一个。合理? –

回答

0

一个),其具有为2的 “USER_ID” 值和 “element_id” 的8值,以及行b)该具有2的 “USER_ID” 值的行和“element_id” 的9

值转换为

(user_id = 2 AND element_id = 8) OR (user_id = 2 AND element_id = 9) 

这是相同的(更接近自己试试)

user_id=2 AND (element_id=8 OR element_id=9) 
+0

我也尝试过。但我不想要一行或另一行。我想要两行。 –

+0

这就是它的意思。你试过了吗?你会得到所有行,只要它们是一个或另一个。如果你正在寻找具有所有这些功能的行,你什么都得不到。可以说,你正在寻找所有蓝色和绿色夹克的人,你需要把'夹克=蓝色或外套=绿色'。这就是布尔逻辑的工作原理。如果你把'外套=蓝色和外套=绿色',你会发现那些在一个夹克里有两种颜色的人。 (好吧,这可能是可能的,但不是只有一种颜色的夹克,这样不好的例子) – Nanne

+0

不,这不是什么意思,是的,我确实尝试了查询。我希望表中的用户具有表格中的两行。所以,如果user_id = 3有一行element_id = 8和一行element_id = 9,那么我想他。如果他只有表中的element_id = 8(并且不是9),我不需要他。建议的查询在这里没有完成。 –

0

根据Aleks G,他建议应该工作。与USER_ID等于

SELECT * FROM elements WHERE user_id=2 AND (element_id=8 OR element_id=9) 

应该检索所有行“2” element_id等于“8”(如果存在),element_id等于“9”(如果存在)甚至认为它说:“OR”之类的工作“如果存在于结果中,也包括它“。

+0

啊现在我明白了,那么它应该是这样的'SELECT * FROM elements WHERE user_id = 2 AND element_id IN(8,9)' 这样试试吧。 – Welling

+0

不幸的是,如果用户只有一行,而不是两者,那么新建议的查询仍然有效。 :( –

+0

Tim,所以你必须在这里使用子查询,如果你使用这样的查询 'SELECT * FROM elements WHERE user_id = 2 AND element_id IN(8,9)HAVING COUNT(element_id)= 2' will return you第一行,而不是两个,所以我们必须使用这个查询作为子查询是这样的 'SELECT * FROM elements WHERE user_id IN(SELECT user_id FROM elements WHERE user_id = 2 AND element_id IN(8,9)HAVING COUNT(element_id )= 2)AND element_id IN(8,9)' 也许这不是最好的方法,但应该工作,并返回你两行user_id = 2只有当element_id是8和9.尝试一下。 – Welling

1

Nanne的解决方案的工作原理:

SELECT * FROM elements as e, elements as ee WHERE e.user_id=2 AND e.element_id=8 AND e.user_id=ee.user_id AND ee.element_id=9 
相关问题