SELECT ... IN在结果集中复制记录?

时间:2011-05-19 12:50:47

标签: mysql sql

您知道如何编写如下查询:

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

还返回重复的记录(即:3个ID为1的客户)?

另一个问题 - 我是否有办法按IN子句中的ID顺序排序记录?

编辑: ID为PK,没有多个具有相同ID的记录。我希望结果集包含ID为1的记录,乘以3次

由于

5 个答案:

答案 0 :(得分: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子句中的值相同。

答案 1 :(得分:1)

如果你有3个客户使用相同的if,你会遇到更大的问题(假设id是PK)。您将在某些时候遇到一些数据完整性问题。

答案 2 :(得分: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

答案 3 :(得分:1)

您可以将列表条目插入(临时)表吗?如果是的话

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

要解决排序,您需要按顺序插入它们,并使用递增的数值,例如'等级'

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

答案 4 :(得分:0)

HI,如果你的表中的id是主键,那么就没有办法让更多的客户拥有id,但是如果不是它会返回id = 1的所有客户