繁体   English   中英

mysql完全连接查询

[英]mysql full join query

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

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

AFAIK,没有FULL INNER JOIN之类的东西。 它可能会退回到常规的INNER JOIN或完全执行其他操作。

我认为您正在寻找OUTER型联接。 我将从将它们更改为LEFT JOIN ,看看是否返回您想要的结果。

如果不是这样,而您确实确实需要FULL OUTER JOIN ,那么请参阅MySQL中的Full Outer Join,以获取有关如何在MySQL中实现一个的示例。

给定表的名称,我希望外键关系排成一行。 因此, 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绝对不是您的意图。

您需要执行左连接,它返回第一个表的所有记录,无论是否匹配。 如果要进行完全外部联接,则需要执行左联接-联合-右联接,因为MySQL中没有完全外部联接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM