mysql完全连接查询

时间:2014-12-03 02:11:56

标签: php mysql sql

以下查询出了什么问题。它不起作用,我基本上需要它来进行完全加入并返回所有字段,无论是否匹配。

SELECT tbl_tickets.ID AS Ticket_ID, tbl_tickets.Ticket_Number, tbl_tickets.Ticket_Category, tbl_orders.PO_Number, tbl_invoice_to.Name AS Dealer_Name 
FROM tbl_tickets 
FULL INNER JOIN tbl_orders ON tbl_tickets.Order_ID=tbl_orders.ID 
FULL INNER JOIN tbl_invoice_to ON tbl_tickets.Invoice_To=tbl_invoice_to.ID
WHERE Ticket_Type='PARENT' AND {$where} 
ORDER BY tbl_tickets.Ticket_Category

3 个答案:

答案 0 :(得分:0)

AFAIK,没有FULL INNER JOIN这样的东西。它可能会回归常规INNER JOIN或完全做其他事情。

我认为您正在寻找OUTER类型的联接。我首先将这些更改为LEFT JOIN,看看是否会返回您正在寻找的结果。

如果没有,并且您确实需要FULL OUTER JOIN,请参阅Full Outer Join in MySQL以获取有关如何在MySQL中实现一个的示例。

答案 1 :(得分:0)

鉴于你的表名,我希望外键关系排成一行。因此,inner join就足够了:

SELECT t.ID AS Ticket_ID, t.Ticket_Number, t.Ticket_Category, o.PO_Number, i.Name AS Dealer_Name 
FROM tbl_tickets t INNER JOIN
     tbl_orders o
     ON t.Order_ID = o.ID INNER JOIN
     tbl_invoice_to i
     ON t.Invoice_To = i.ID
WHERE Ticket_Type = 'PARENT' AND {$where} 
ORDER BY t.Ticket_Category

(注意我引入了表别名,这使得查询更容易编写和阅读。)

如果没有返回任何内容,则首先删除WHERE子句中的条件。如果仍未返回任何内容,请检查连接条件。

MySQL不支持完全外连接。所以,当你写:

FROM tbl_tickets FULL INNTER JOIN
     tbl_orders . . .

您将别名FULL分配给tbl_tickets - 绝对不是您的意图。

答案 2 :(得分:0)

你需要做一个左连接,它返回第一个表的所有记录,无论是否匹配。 如果你想做一个完整的外连接,你需要做一个左连接 - union - right join,因为MySQL里没有完全外连接