我想构建一个在执行时应该优化性能的查询。 下面是我的表结构: -
表名: - 库存
表格结构: -
item_id int(50) Primary key,
item_name varchar(50),
matchingItemID int(50).
从上表中,我想找到匹配的项目对, 即如果A和B分别是item_id 1和2的两个项目,那么名为matchingItemID的字段中的值必须分别为2和1。
matchingItemID是添加项目的item_id。
例如
item_id item_name matchingItemID
1 A 2
2 B 1
因此,构建的查询应返回输出,如下所示: -
A - B。
我尝试了一个查询,但是执行需要时间,因此我认为它没有优化性能。
以下是我构建的查询: -
SELECT a.item_id, b.item_id
FROM inventory a, inventory b
WHERE a.matchingItemID = b.item_id
AND b.matchingItemID = a.item_id
AND a.item_id != b.item_id;
答案 0 :(得分:0)
如果项目始终相互匹配,您可以执行以下操作:
SELECT a.item_id, b.item_id
FROM inventory a
JOIN inventory b ON a.matchingItemID = b.item_id
此外,您可以向matchingItemID
列添加索引。
修改
似乎多余,但这就是你要求的:
SELECT a.item_id, b.item_id
FROM inventory a
JOIN inventory b ON a.matchingItemID = b.item_id AND b.matchingItemID = a.item_id
答案 1 :(得分:0)
如果您不需要拥有A=B
和B=A
的两条记录,那么只需使用此查询,它只输出一对A=B
而不是两条:
SELECT a.item_id id1, b.item_id id2
FROM inventory a
join inventory b on
(a.matchingItemID = b.item_id)
AND
(b.matchingItemID = a.item_id)
AND
(a.item_id < b.item_id)