我在mysql中有以下表格:
表A:
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| sid | varchar(50) | YES | | NULL | |
| type | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
表B:
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| channel | varchar(20) | YES | | NULL | |
| sid | varchar(50) | YES | | NULL | |
| type | varchar(20) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
我想找到A中的行,其中B中的条目具有相同的sid。我尝试了以下Join命令:
SELECT A.sid FROM A join B on A.sid=B.sid;
此查询从未给我答案。 Tabe A有465420个条目,表B有291326个条目。
为什么不起作用? 是否有太多条目? 或者它与我没有分配主键的事实有关?
答案 0 :(得分:4)
您的查询没问题。你似乎需要一个索引。我建议B(sid)
。
您还可以将查询编写为:
select a.sid
from a
where exists (select 1 from b where a.sid = b.sid);
这不会影响效果 - 除非b
中有大量重复项 - 但它会消除b
中重复项引起的问题。
答案 1 :(得分:0)
尝试
SELECT A1.sid
FROM (select A.sid from A order by sid) A1
join (select B.sid from B order by sid) B1
on A1.sid=B1.sid;
其他上述情况也适用。你需要索引。