MySQL table -> Можете ли вы возвращать одну и ту же строку несколько раз в одном запросе? - PullRequest
8 голосов
/ 10 июля 2009
SELECT * FROM menu WHERE item_id = 1 OR item_id = 2 OR item_id = 3;

Вышеприведенный оператор возвращает 3 строки. Но инструкция ниже возвращает только 2 строки.

SELECT * FROM menu WHERE item_id = 1 OR item_id = 1 OR item_id = 2;

И я понимаю, почему нравится, но есть ли способ заставить item_id 1 возвращаться дважды ???

Пример того, что я хочу вернуть:

id -> 1 фишка € 2.50
id -> 1 фишка € 2,50
id -> 2 колы € 1,60
--------------------
Итого € 6,60

Ответы [ 7 ]

6 голосов
/ 10 июля 2009

Вы можете присоединиться к другому столу, например

SELECT * FROM menu
INNER JOIN order_items ON menu.item_id = order_items.item_id
WHERE order_id = 123;

Или просто продублируйте их в вашем приложении.

Тебе не нужно делать то, что ты просишь.

5 голосов
/ 10 июля 2009

Вы должны сделать что-то вроде этого:

SELECT * FROM menu WHERE item_id = 1
UNION ALL
SELECT * FROM menu WHERE item_id = 1
UNION ALL
SELECT * FROM menu WHERE item_id = 2
1 голос
/ 13 декабря 2011

Вы просто делаете объединение среди его псевдонимов, например,

select top 5 * from item a, item b where a.itemid =1

. Он будет печатать данные, как показано ниже.

0 голосов
/ 10 июля 2009

Первый ответ выглядит неправильно. Следует оставить внешнее соединение с order_items в качестве первой таблицы ...

SELECT * FROM order_items oi
left outer JOIN menu m
ON oi.item_id = m.item_id
WHERE order_id = 123;
0 голосов
/ 10 июля 2009

почему вы хотите дважды запросить db для одной и той же вещи. Просто запросите один раз и сделайте модификацию (добавить строки или отобразить одну и ту же строку дважды) используя используемый вами язык программирования.

Что-то вроде

id -> 1 Chips €2.50 X 2
id -> 2 Coke €1.60
--------------------
Total €6.60
0 голосов
/ 10 июля 2009

Используйте союзы:

SELECT * FROM menu WHERE item_id = 1
  UNION ALL
SELECT * FROM menu WHERE item_id = 1
  UNION ALL
SELECT * FROM menu WHERE item_id = 2
0 голосов
/ 10 июля 2009

Для этого нужен способ создания фиктивного набора строк, а у MySQL его нет.

Вы можете сделать следующее:

SELECT  *
FROM    (
        SELECT  1 AS x
        UNION ALL
        SELECT  1 AS x
        UNION ALL
        SELECT  2 AS x
        ) dummy
JOIN    menu
ON      menu.id = dummy.x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...