MySQL表 - >你可以在同一个查询中多次返回同一行吗?

时间:2009-07-10 11:53:22

标签: mysql

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 个答案:

答案 0 :(得分:6)

您可以加入另一张桌子,例如

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

或者只是在您的应用程序中复制它们。

你不应该真的需要做你想要的。

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

答案 2 :(得分:1)

您只需在其别名之间建立联接,例如

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

它将打印如下数据。

1 abc
1 abc
1 abc
1 abc
1 abc

希望,你会明白的。

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

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

答案 5 :(得分:0)

为什么要查询db两次同样的事情。只查询一次并进行修改 (使用您正在使用的编程语言添加行或显示相同的行两次)。

这样的东西
id -> 1 Chips €2.50 X 2
id -> 2 Coke €1.60
--------------------
Total €6.60

答案 6 :(得分:0)

第一个答案看起来不对。应该将order_items作为第一个表格保留在外部联接...

SELECT * FROM order_items oi
left outer JOIN menu m
ON oi.item_id = m.item_id
WHERE order_id = 123;