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左
答案 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;