2014-03-06 50 views
1

我有一個名爲Data(id,url)的表。我的項目中的一個api返回了我的id列表(這個列表中可能有重複的id)。爲了這個問題,我們假設這個列表爲(1,1,2,3,4,4)Mysql查詢,允許重複

我試圖找到與這些ID相關的URL。

我第一次和天真的嘗試是IN子句中使用:

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

這將返回我四行。即網址,ID 1,2,3和4

我要的是六排,每一個指定id(重複的行需要保留)

我瞭解,在條款是沒有幫助在這情況。任何人都可以請我指出正確的方向?

我可以通過迭代列表來激發個人id的查詢,但它是我的最後一招。

UPDATE:添加關於表的詳細信息

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

如果您發佈該表的結構,它可能很有用。 – Mubo

+1

你能澄清你的問題嗎?你的'IN'列表是多餘的,是的,但沒有理由你的查詢不會返回所有這6個URL的URL。另外,如果它不是唯一的,你不應該使用'id'作爲你的字段名稱;這是令人困惑的。 –

+0

@EdCottrell請參閱最新的問題。我希望這會澄清一些疑問。謝謝。 – Icarus3

回答

0

這個作品非常好

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

Demo

下降的唯一的ID

降主鍵

ALTER TABLE Data DROP INDEX `PRIMARY`; 
+0

感謝您的回覆。但在我的情況下,id是主鍵,它的獨特性。 – Icarus3

+0

如果您要存儲重複項並選擇重複項,那麼爲什麼您要對其進行獨特的設置?想刪除獨特? –

+0

請參閱更新部分。我認爲我無法改變我的案子中的任何一張桌子。它已經填充。這些數據將被導出到excel表格以進行頻率計數和其他用途。 – Icarus3

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