大家下午好!你可以帮帮我吗? :)
数据库示例:
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
被分配给目录代码
。除了 ID
之外,所有字段都是 VARCHAR
。可能为空。
我想做什么:
选择例如目录代码= 6083
并获取所有其他目录代码
IF其中一个供应商代码
是一样。
所以我应该得到: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`
)
)
需要改进设计
我的真实数据库有超过100 000 行。我觉得数据库设计需要改进,但哪些改进呢?
INDEXES
,主键
,第二个数据库带有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, seller_code)
上建立索引。
关于mysql - SQL选择具有相同列值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36268768/