2011-04-21 159 views
3

好吧,可以说我有一个包含三列的表格。第一列是唯一的ID,第二列是用户名,第三列是用户拥有的项目。根据另一列中的不同值选择重复值

我想要做的是从项目行中选择两个不同的用户名拥有的值。我该怎么做呢?所以对于假设的缘故让我说我想看看鲍勃和鲁斯所拥有的物品。

任何帮助将不胜感激。

有没有一种方法可以发表表格来举例说明我在说什么?

+1

你是什么意思第三列包含项目** s **?它是某种分隔列表吗?如果是这样,除非你规范化你的表格,否则这将是棘手的。 – 2011-04-21 22:37:56

+0

项目列是项目列表的外键吗?对于相同的用户名和项目,是否可以存在两行? – Thomas 2011-04-21 22:43:58

+0

嘿家伙,不,一个用户可能拥有一件物品。两行都是连接两个表的外键。 – 2011-04-21 22:50:11

回答

2

依据是什么,我认为你的表结构是...

SELECT i.itemid, 
     i.description 
FROM items i 
     JOIN useritemrelationship r 
     ON i.itemid = r.itemid 
     JOIN users u 
     ON u.userid = r.userid 
WHERE u.name in ('Ruth', 'Bob') 
GROUP BY i.itemid 
HAVING COUNT(DISTINCT r.userid) = 2 
+0

嗨马丁,你有什么机会可以为我解释一下吗? t1和t2是什么意思? – 2011-04-21 22:55:23

+0

不,我没有考虑到这些,因为这是我听说过的第一个!我是否假设像'username(userid,name)'和'items(itemid,description)'和'useritemrelationship(userid,itemid)' – 2011-04-21 23:01:07

+0

是的。对不起,我的坏描述能力:(你不知道你现在有多少帮助我,我目前正在努力获得4个额外的声望,我需要为你提供帮助,大声笑 – 2011-04-21 23:02:23

0

我可能会建议对至少三个领域的项目创建一个新表:ITEMID(如果该项目名称不是唯一的) ,itemName和ownerID。然后在新表中查询:

SELECT itemName FROM items WHERE ownerID='ruths id' OR ownerID='bobs ID' 

这也将有助于实现正常化通常是干净/举办礼仪建立数据库时要执行。

+0

嗯,我如何设置它是我有一个表,描述项目,包括名称,并将项目ID转移到我上面描述的表中使用外键。我正在搜索的表格是针对另一个表格中某个项目的所有权的每个实例。因此,此表存在用于定义用户表和项目表之间的关系。 – 2011-04-21 22:46:30

相关问题