两个表

时间:2015-09-04 13:00:23

标签: mysql

考虑我有2张桌子。 Itemsbids

  • Items: - id(整数),category(整数)。

id的范围是1到8,它们是唯一的。在Category中,它是1和2作为示例id:1到4在类别1中,5到8在类别2中。

  • bids表包含item_id,类似于Items.id,范围从1到8.

现在我的查询是,如果我从bids.item_id中选择一个项目,我想查看同一类别中的ID是什么。

例如:如果我在查询中说 WHERE item_id FROM bids is '2',我想看到同一类别的其他ID,这意味着它应该返回'1''3''4',因为1到4个items.id属于category = 1

3 个答案:

答案 0 :(得分:2)

我根本不知道为什么你需要引用bids表,因为bids.item_iditems.id相同。您只需要与其他项目属于同一类别的所有项目。你可以用一个简单的自我加入来做到这一点。

SELECT i1.id
FROM items AS i1
JOIN items AS i2 ON i1.category = i2.category
WHERE i2.id = 2

如果您确实拥有bid.id并且想要查找与出价中的项目属于同一类别的所有项目,则只需添加其他加入:

SELECT i1.id
FROM items AS i1
JOIN items AS i2 ON i1.category = i2.category
JOIN bids AS b ON b.item_id = i2.id
WHERE b.id = :bidID

答案 1 :(得分:1)

select i.* from
items i where i.category = 
(select i2.category from items i2 join bids b on b.item_id = i2.id and b.id = :INPUTBIDID)

这将找到与您选择的出价中的项目共享类别的所有项目。它通过子选择来实现。所以它在paranthesis(找到正确的类别)中进行选择,并在外部查询的where子句中使用它。

答案 2 :(得分:0)

在我看来,有两种可能的解决方案:

<强> 1。您的类别永远不会改变

在你的问题中,你提到只有两种可能的类别:1和2,它们完全依赖于项目ID。 这总是这样吗?然后答案很简单:

SELECT id FROM items WHERE items.category = {1 or 2 depending on which item was selected} AND items.id <> {id from selected item}

<强> 2。您的类别可能会在将来某一天发生变化

SELECT id FROM items WHERE items.category = (SELECT items.category FROM items, bids WHERE items.id = bids.item_id)

这有帮助吗?