大家下午好!你可以帮帮我吗? :)
数据库示例:
ID Catalog Code Description Type Supplier Supplier Code
1 6083 TV LG 32 tv lg ud28f1137ka-ga-i2-tr
1 6083 TV LG 32 tv samsung asfb1145-ssd # select it
2 6129 Phone 5X phone apple mics_rp
2 6129 Phone 5X phone htc nco_p13 961-x
2 6129 Phone 5X phone nokia n_41s
3 6210 Friezer agd samsung asfb1145-ssd # found match
it has the same
`Supplier Code`
上面的
ID
被分配给Catalog Code
。除VARCHAR
外,所有字段均为ID
。可能是空的。我想做什么:
如果
Catalog Code = 6083
之一相同,则选择例如Catalog Codes
并获取所有其他Supplier Codes
。所以我应该得到:
Catalog Code = 6210
(最后一行),因为它与Supplier Code
(第一行)具有相同的6083
。我可怜的尝试:
SELECT a.*
FROM `TABLE` a
WHERE EXISTS
(SELECT 1
FROM `TABLE` b
WHERE b.`Catalog Code` = '6083'
AND (
a.`Supplier Code` NOT IN ('')
AND a.`Supplier Code` IN b.`Supplier Code`
)
)
需要设计改进
我的实际数据库有10万多行。我觉得数据库设计需要改进,但是哪些需要改进?
INDEXES
,PRIMARY KEY
,第二个具有FOREIGN KEY
的数据库? 最佳答案
我会这样写查询:
select t.*
from t
where t.supplier_code in (select t2.supplier_code
from t t2
where t2.catalog_code = '6083'
);
您的代码很奇怪。为什么会有
not in ('')
?这是多余的。然后在第二个in
上,您需要一个列表,而不是列值。实际上,只需=
就足够了。为了提高性能,您需要在
t(catalog_code, supplier_code)
上建立索引。关于mysql - SQL选择具有相同列值的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36268768/