说我只有三张桌子。 Order_List,Delivery_Order和InfiStall_Order:
Order_List
是我们目前收到的整个订单的表格,包括但不限于:产品代码(' id_cart' ) ,客户名称('客户' ),已用付款('付款' )以及获取方式产品('方法' )。
------------------------------------------------------
id_cart customer payment method
------------------------------------------------------
0001 Klaudia creditcard Infistall
0002 Klaudia paypal Delivery
0003 MyFather Transfer Delivery
0004 MyMother Transfer Infistall
-------------------------------------------------------
获取产品的方法分为两种方法:'交付' &安培; ' InfiStall':
交付是客户希望将产品交付到地址的地方,而InfiStall是客户希望通过将产品送到我们列出的商店来获取产品的地方。
由于交付和InfiStall都有特定的附加信息,例如位置,城市或国家/地区,因此他们必须拥有自己的表格。如下:
说这是交付表Delivery_Order
------------------------------------------------------
id_cart location address status
------------------------------------------------------
0003 Asia Japan Delivered
0004 Africa Maroko Delivered
-------------------------------------------------------
并说这是Infistall InfiStall_Order
------------------------------------------------------
id_cart location address status
------------------------------------------------------
0001 Pluto Nowhere Picked-up
0002 Markurius Showhere Waiting
-------------------------------------------------------
所有表都有名为id_cart的列。这就是为什么,首先,我想根据id_card选择所有信息。
我想要的是,
当客户登录他的帐户(比如名为Klaudia
的用户)并且她将看到他们的订单历史记录时,他们会看到如下:
-----------------------------------------------------------------------
id_cart products quantity invoices status
-----------------------------------------------------------------------
this 2 $20 Picked
0001 that 1 $20 (See Detail)
those 2 $20
-----------------------------------------------------------------------
this 2 $20 Delivered
0002 that 1 $20 (See Detail)
those 2 $20
-----------------------------------------------------------------------
然后,当Klaudia
点击See Detail
链接时,它会显示来自deliver_order / infistall_order的信息
答案 0 :(得分:2)
您必须专门选择每个项目,因为某些列将是不明确的(在表格中具有相同的名称。
SELECT
o.id_cart AS id,
d.location AS deliverLocation,
i.location AS infiLocation,
... etc
FROM Order_List o
LEFT JOIN Delivery_Order d
ON o.id_cart = d.id_cart
LEFT JOIN InfiStall_Order i
ON o.id_cart = i.id_cart
WHERE o.customer = 'Klaudia'
如果表Delivery_Order或InfiStall_Order中的任何一个表可能不包含任何行,则必须使用LEFT JOIN
而不是JOIN
。
编辑现在以LEFT JOIN显示
<强> EDIT2:强>
如果数据仅在表Delivery_Order或InfiStall_Order中,则使用CASE对其进行评估:
SELECT
*,
CASE
WHEN d.id_cart IS NOT NULL THEN 1
ELSE 0
END AS isInDeliver
FROM Order_List o
LEFT JOIN Delivery_Order d
ON o.id_cart = d.id_cart
LEFT JOIN InfiStall_Order i
ON o.id_cart = i.id_cart
WHERE o.customer = 'Klaudia'