SELECT ... IN, чтобы дублировать записи в наборе результатов? - PullRequest
1 голос
/ 19 мая 2011

Вы знаете, как написать запрос вроде:

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

чтобы вернуть также дубликаты записей (т. Е. 3 клиента с идентификатором 1)?

другой вопрос - есть ли способ сортировки записей по порядку идентификаторов в предложении IN?

Edit: Идентификатор PK, нет нескольких записей с одинаковым идентификатором. Я хочу, чтобы набор результатов содержал запись с идентификатором 1, умноженную в 3 раза

Спасибо

Ответы [ 5 ]

1 голос
/ 19 мая 2011

Можете ли вы вставить записи списка во (временную) таблицу? если так

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
1 голос
/ 19 мая 2011

Вы можете построить встроенную таблицу и 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
1 голос
/ 19 мая 2011

Если у вас 3 клиента с одинаковым идентификатором, у вас большие проблемы (при условии, что идентификатор - это PK).В какой-то момент у вас возникнут проблемы с целостностью данных

1 голос
/ 19 мая 2011

для вашего первого вопроса это должно сработать: SELECT * FROM customers WHERE id IN (1, 3); он вернет всех клиентов, которые имеют id = 1 или id = 3, независимо от того, сколько там, разделите один и тот же идентификатор.

для второго вопроса:

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

Значения в поле должны быть такими же, как в предложении IN.

0 голосов
/ 19 мая 2011

HI, если ваш идентификатор в таблице является первичным ключом, то невозможно иметь больше клиентов с идентификатором, но в случае, если его нет, он вернет всех клиентов с идентификатором = 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...