1

我想构建一个查询,在执行时应该优化性能。下面是我的表结构: -

表名:- 库存

表结构:-

item_id int(50) Primary key,
item_name varchar(50),
matchingItemID int(50).

从上表中,我想找到匹配的item对,即如果A和B是item_id分别为1和2的两个item,那么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;
4

2 回答 2

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)
于 2012-12-29T08:54:11.037 回答
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
于 2012-12-29T08:38:18.000 回答