从具有内部联接的列中选择相等的值(sql)

时间:2017-10-22 16:54:19

标签: mysql

我对SQL很陌生,所以请不要对我太过刻意:(

我有两张桌子 - " cart"和"命令"。在"购物车" table是随机用户订购的所有内容 - 在这种情况下是这几行(上面的列名称):

session_id  - product_id - product - product_name - price - quantity

1 - 1 - Table - Something - 10.00 - 1  

1 - 2 - Chair - SomethingNew - 20.00 - 1

2 - 2 - Chair - SomethingNew - 20.00 - 1

我想写一个语句,选择具有相同session_id的所有订单 - 在本例中为数字1 - 并将其复制到" orders" table,因为具有相同会话ID的所有项目都应标记为一个大订单 - 但我不想对其进行硬编码(例如,select和session_id = 1)... 这是我到目前为止所做的选择:

我尝试使用内部/自联接,以便我可以检查值是否相同

SELECT * from cart JOIN cart AS cartB
WHERE cart.session_id = cartB.session_id
GROUP BY cart.session_id;

但是这会给我以下行作为解决方案:

session_id  - product_id - product - product_name - price - quantity

1 - 1 - Table - Something - 10.00 - 1  

2 - 2 - Chair - SomethingNew - 20.00 - 1

而不是(我想要的):

session_id  - product_id - product - product_name - price - quantity

1 - 1 - Table - Something - 10.00 - 1  

1 - 2 - Chair - SomethingNew - 20.00 - 1
编辑:我知道,第2行和第3行非常相似。但这就是为什么会话ID在这种情况下非常重要,以及我为什么要使它工作。

我做错了什么?是否需要内连接?我真的有一些问题,因为我在这里是一个巨大的初学者..但我的代码对我有意义.. :( 非常感谢每个花时间阅读(甚至可能有帮助)的人!

1 个答案:

答案 0 :(得分:0)

目前我在这里看到2个选项:

您的PROGRAM要么将要复制到订单表的订单的会话ID传递给SQL,这在任何网上商店都是正常的。

在这种情况下,您必须从您的计划和pass it to your SQL query as a parameter, eg. in PHP获取正确的session_id=

或者您想要将所有session_id&t购物车内容复制到订单中。在这种情况下,它更简单,没有任何WHERE:INSERT INTO order SELECT * FROM cart;

如果您需要其他内容,则应指定如何确定需要将哪个session_id从购物车复制到订单。

UPD。你是对的,你的例子中的JOIN似乎没有做任何有用的事情。