2013-02-24 57 views
0

上的未知列我有两个查询运行在同一个表上,除了第二个失败并添加了一个左连接。左连接失败,在条款

成功运行

SELECT * 
FROM paypal_ipn_orders 
LEFT join itemkey on paypal_ipn_orders.item_number = itemkey.item_id 
WHERE packing_slip_printed = 0 
AND LOWER(payment_status) = 'completed' 
AND address_name <> '' 
order by itemkey.sort_id; 

然而,这第二个查询用“‘关于条款’在未知列‘paypal_ipn_orders.item_number’”失败,但它运行良好与开出左侧加入。 Paypal_ipn_orders表包含item_number字段。

SELECT * 
FROM paypal_ipn_orders as table1, 
(SELECT payer_email, COUNT(*) as count FROM paypal_ipn_orders GROUP BY payer_email ORDER BY count DESC) as table2 
LEFT join itemkey on table1.item_number = itemkey.item_id 
WHERE table1.payer_email = table2.payer_email 
and packing_slip_printed = 0 
AND LOWER(payment_status) = 'completed' 
AND address_name <> '' 
ORDER BY count DESC, auction_multi_item, item_number; 

表1后的逗号是必需的,因为(SELECT ...是FROM子句的一部分

一个有趣的注意,我改变的顺序FROM子句:。

SELECT * 
FROM (SELECT payer_email, COUNT(*) as count FROM paypal_ipn_orders GROUP BY payer_email ORDER BY count DESC) as table1, 
paypal_ipn_orders as table12 
LEFT join itemkey on table2.item_number = itemkey.item_id 
WHERE table2.payer_email = table1.payer_email 
and packing_slip_printed = 0 
AND LOWER(payment_status) = 'completed' 
AND address_name <> '' 
ORDER BY count DESC, auction_multi_item, item_number; 

现在的错误信息是:'where clause'中的未知列'table2.payer_email'。但是这将不会在左连接外运行。给出where子句消息中的同一未知列。

仅供参考 - 这工作:

SELECT payer_email, COUNT(*) as count 
FROM paypal_ipn_orders 
WHERE packing_slip_printed = 0 
AND LOWER(payment_status) = 'completed' 
AND address_name <> '' 
GROUP BY payer_email 
ORDER BY count DESC; 

回答

0
FROM paypal_ipn_orders table1, 

你的意思是... FROM paypal_ipn_orders AS table1 (...

另请注意,逗号在table1,的末尾。我不确定这是否是有意的?

+0

对不起,它无法同我们没有“‘为’表1”我也曾尝试表名“paypal_ipn_orders”具有相同的结果。 – 2013-02-24 13:30:58

+0

好的,如果您仍然遇到问题,我会稍后再仔细研究。 – 2013-02-24 17:15:20

+0

谢谢约翰,对我来说这仍然是一个神秘的东西。 – 2013-02-24 17:56:21

0

这到底是什么工作:

SELECT * 
     FROM (SELECT payer_email, COUNT(*) as count 
      FROM paypal_ipn_orders 
      Where packing_slip_printed = 0 
      AND LOWER(payment_status) = 'completed' 
      AND address_name <> '' 
      GROUP BY payer_email 
      ORDER BY count DESC) as table1, 
     paypal_ipn_orders as table2 
     LEFT join itemkey on table2.item_number = itemkey.item_id 
     WHERE table1.payer_email = table2.payer_email 
     and packing_slip_printed = 0 
     AND LOWER(payment_status) = 'completed' 
     AND address_name <> '' 
     ORDER BY count DESC, auction_multi_item, sort_id 
+0

感谢发布!对不起,我没有机会看,但我很高兴你明白了。 – 2013-02-27 18:42:53