您知道如何编写如下查询:
SELECT * FROM customers WHERE id IN ( 1, 3, 1, 1 )
还返回重复的记录(即:3个ID为1的客户)?
另一个问题 - 我是否有办法按IN子句中的ID顺序排序记录?
编辑: ID为PK,没有多个具有相同ID的记录。我希望结果集包含ID为1的记录,乘以3次
由于
答案 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的所有客户