MySQL таблицы -> Можно ли вернуть ту же строку несколько раз, в одном запросе?

голоса
8
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

Задан 10/07/2009 в 10:53
пользователем
На других языках...                            


7 ответов

голоса
5

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

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
Ответил 10/07/2009 в 10:55
источник пользователем

голоса
6

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

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

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

Вы не должны действительно нужно делать то, что вы просите.

Ответил 10/07/2009 в 10:56
источник пользователем

голоса
0

Вам нужен способ для создания фиктивного набора строк , чтобы сделать это, и 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
Ответил 10/07/2009 в 10:56
источник пользователем

голоса
0

Использование союзов:

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
Ответил 10/07/2009 в 10:57
источник пользователем

голоса
0

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

Что-то вроде

id -> 1 Chips €2.50 X 2
id -> 2 Coke €1.60
--------------------
Total €6.60
Ответил 10/07/2009 в 11:12
источник пользователем

голоса
0

Первый ответ выглядит так. Следует левое внешнее соединение с ORDER_ITEMS как первый стол ...

SELECT * FROM order_items oi
left outer JOIN menu m
ON oi.item_id = m.item_id
WHERE order_id = 123;
Ответил 10/07/2009 в 11:26
источник пользователем

голоса
1

Вы просто сделать присоединиться среди своих псевдонимов, например,

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

Он будет печатать данные, как в следующем.

1 abc
1 abc
1 abc
1 abc
1 abc

Надеюсь, вы поймете.

Ответил 13/12/2011 в 07:00
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more