我试图加入几张牌桌,因为我需要在所有牌桌中加入价值。
到目前为止,我尝试了两种方法:
第一种方式:
SELECT
o.`order_id` as `Order ID`,
o.`STATUS` as `Order Status`,
o.`date_created` as `Date Created`,
op.`SKU`,
op.`NAME`,
o.`STATE`,
op.`QUANTITY`,
c.`customer_id`
FROM
`orderProducts` op
INNER JOIN
orders o on op.order_id = o.order_id
INNER JOIN
customers c on c.customer_id = o.customer_id
WHERE
o.order_id IN (616898, 616901)
第二种方式:
SELECT
o.`order_id` as `Order ID`,
o.`STATUS` as `Order Status`,
o.`date_created` as `Date Created`,
op.`SKU`,
op.`NAME`,
o.`STATE`,
op.`QUANTITY`,
c.`customer_id`
FROM
`orders` o,
`orderproducts` op,
`customers` c
WHERE
o.order_id IN (616898, 616901)
AND
c.customer_id= o.customer_id
AND
o.order_id = op.order_id
表数据:
订单
+----------------------------+------------+------+-----+
| Field | Type | Null | Key |
+----------------------------+------------+------+-----+
| order_id | int(11) | NO | PRI |
| customer_id | int(11) | YES | |
orderproducts
+----------------------------+------------+------+-----+
| Field | Type | Null | Key |
+----------------------------+------------+------+-----+
| order_id | int(11) | NO | |
客户
+----------------------------+------------+------+-----+
| Field | Type | Null | Key |
+----------------------------+------------+------+-----+
| customer_id | int(11) | NO | PRI |
抱歉,但我真的不知道如何表达我想要的数据,我会尽力解释。
我希望我的select语句中的列来自订单616898和616901。 order_id字段在order和orderproducts表中都是相同的。 customer_id字段在订单和客户表中都相同。这就像我使用order_id从orderproducts表中添加额外的列SKU,NAME,QUANTITY,使用订单和customers表中的customer_id提取正确的列和列电子邮件。
答案 0 :(得分:1)
您需要将orders
和customer
加入customer_id
,并且最好使用ID加入。
所以查询将是
SELECT
o.`order_id` as `Order ID`,
o.`STATUS` as `Order Status`,
o.`date_created` as `Date Created`,
op.`SKU`,
op.`NAME`,
o.`STATE`,
op.`QUANTITY`,
c.`email`
FROM
`orders` o
INNER JOIN
orderProducts op on op.order_id = o.order_id
INNER JOIN
customers c on c.customer_id = o.customer_id
WHERE
o.order_id IN (616898, 616901)
现在这将做什么
如果有匹配的数据,即order_id
位于orders
且位于orderproducts
且同一customer_id
,则会尝试加入所有表格在orders
和customers
最后仅将数据过滤到616898 or 616901
请注意,如果给定过滤器没有可用的匹配数据,则可能无法获得结果。如果您仍然希望从orders
表返回数据,即使没有匹配并将表数据连接为null,您可能需要将inner join
更改为left join