我有一个名为Data(id,url)的表。我的项目中的一个api返回id列表(此列表中可能有重复的id)。为了这个问题,我们假设这个列表为(1,1,2,3,4,4)
我正在尝试找到与这些ID相关联的网址。
我的第一个天真的尝试是使用IN子句:
SELECT url from Data where id in ( 1, 1, 2, 3, 4, 4);
这会给我返回四行。即id为1,2,3和4的网址。
我想要的是六行,每一行用于指定的id(需要保留重复的行)
我知道IN子句对这种情况没有帮助。有人可以指点我正确的方向吗?
我可以通过迭代列表来触发个人id的查询,但这是我的最后手段。
更新:添加有关表
的更多详细信息mysql> desc Data;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| url | varchar(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql> select * from Data;
+----+-------+
| id | url |
+----+-------+
| 1 | a.com |
| 2 | b.com |
| 3 | c.com |
| 4 | d.com |
+----+-------+
4 rows in set (0.00 sec)
mysql> select url from Data where id in(1,1,2,3,4,4);
+-------+
| url |
+-------+
| a.com |
| b.com |
| c.com |
| d.com |
+-------+
4 rows in set (0.00 sec)
我想要的是:
+-------+
| url |
+-------+
| a.com |
| a.com |
| b.com |
| c.com |
| d.com |
| d.com |
+-------+
答案 0 :(得分:0)
这非常好
SELECT url
from table1
where id in ( 1, 1, 2, 3, 4, 4);
删除id上的唯一
alter table Data drop index PRI;
删除主键
ALTER TABLE Data DROP INDEX `PRIMARY`;
答案 1 :(得分:0)
它不漂亮,但是
select url
from Data
inner join
( SELECT id FROM (
SELECT 1 as id UNION ALL
SELECT 1 as id UNION ALL
SELECT 2 as id UNION ALL
SELECT 3 as id UNION ALL
SELECT 4 as id UNION ALL
SELECT 4 as id
) as list_table ) as table2
on (Data.id = table2.id);
我发现列表中的select
值或列表中的join
几乎无法获取值,但您可以查看此SO Question