Mysql查询,允许重复

时间:2014-03-06 19:23:12

标签: mysql sql

我有一个名为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 |
+-------+

2 个答案:

答案 0 :(得分:0)

这非常好

   SELECT url 
   from table1
   where id in ( 1, 1, 2, 3, 4, 4);

Demo

删除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