2011-05-19 35 views
1

你知道如何編寫一個查詢,如:SELECT ... IN在結果集中複製記錄?

SELECT * FROM customers WHERE id IN (1, 3, 1, 1) 

也返回重複的記錄(即:3級的客戶ID 1)?

另一個問題 - 有沒有一種方法,我可以得到記錄排序的IN子句中的ID的順序?

編輯: ID是PK,沒有多個具有相同ID的記錄。我想結果集包含ID爲1的記錄,再乘以3倍

感謝

+0

你從哪裏得到構建你的子句的IDS? – Paddy 2011-05-19 12:54:53

+0

IMO這種邏輯不應該在查詢中... – Clash 2011-05-19 13:11:18

回答

1

您可以將列表項目分成一(臨時)表?如果是這樣

select c.* from customers c join #tmp t on c.id = t.id 

爲了解決這個排序你需要與上升的數值順序插入這些如'rank'

select c.* from customers c join #tmp t on c.id = t.id order by t.rank 
1

關於第一個問題這應該工作:SELECT * FROM customers WHERE id IN (1, 3);它將返回有ID = 1個或ID = 3無論怎樣所有客戶很多人都有相同的ID。

對於第二個問題:

SELECT * FROM customers WHERE id IN (1, 3) Order By Field(id,1,3); 

價值觀字段應該相同IN子句。

+0

請看我的編輯(我添加了一些進一步的細節/規格/意見) – 2011-05-19 13:01:12

+0

@Tudor:你想同一行顯示3次嗎? – 2011-05-19 13:03:00

+0

是的,這就是我想要的 – 2011-05-19 13:20:06

0

HI,如果你在表的id是主鍵,那麼有沒有辦法讓更多的客戶ID,但如果它不是比它會返回所有客戶ID = 1

+0

不,我沒有多個記錄與該ID - 我只是想要相同的記錄乘以3倍 – 2011-05-19 12:57:11

1

如果你有3個客戶使用相同的ID,你有更大的問題(假設ID是PK)。某些時候您會遇到一些數據完整性問題。

+0

請參閱我的編輯(我添加了一些進一步的細節/規格/意見) – 2011-05-19 13:01:04

+1

做一個UNION SELECT將是一個選項。但這不是一個乾淨的解決方案。 SELECT * FROM customers WHERE id IN(1,3)UNION SELECT * FROM customers WHERE id IN(1)UNION SELECT * FROM customers where id IN(1)。再次 - 這可能不是乾淨的解決方案。 – 2011-05-19 13:07:22

1

你可以建立一個內嵌表,並join基表:

SELECT cust.* 
FROM (
     select 1 as id 
     union all 
     select 3 
     union all 
     select 1 
     union all 
     select 1 
     ) as ids 
LEFT JOIN 
     Customers cust 
ON  ids.id = cust.id 
+0

這可能是一個有趣的想法。另外,我想創建一個臨時表,使用我的ID創建記錄,然後與客戶聯繫。我正在尋找更簡單的東西 - 如果可能的話 – 2011-05-19 13:10:46

+0

我接受了lastfish的回覆,因爲他在網站的開頭,信譽不到100--儘管我也提升了你的答案。謝謝您的意見 – 2011-05-19 14:37:12