考虑我有2张桌子。 Items
和bids
。
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
答案 0 :(得分:2)
我根本不知道为什么你需要引用bids
表,因为bids.item_id
与items.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)
这有帮助吗?