mysql - SQL JOINS 和命名连接列

标签 mysql sql left-join

我有一个产品表和一个下载表。

Downloads 表有 4 个字段,ID、Name、Category 和 Download

产品表有 3 个特定于下载的字段:下载、订购指南和提交表。这些字段中的每一个都存储下载表中记录的 ID。 Product 表中的这 3 个字段永远不会有相同的下载 ID 值。

我有以下 SQL 语句:

SELECT product_id, product_name, product_download, product_submittal, product_ordering_guide, product_status, tbl_downloads.download_id, tbl_downloads.download_name
FROM tbl_products
LEFT JOIN tbl_downloads ON tbl_products.product_download=tbl_downloads.download_id
LEFT JOIN tbl_downloads ON tbl_products.product_submittal=tbl_downloads.download_id
LEFT JOIN tbl_downloads ON tbl_products.product_order_guide=tbl_downloads.download_id

它会产生以下错误:

#1066 - Not unique table/alias: 'tbl_downloads'

这个错误是有道理的,我知道它会发生,但我不知道如何修复它。我需要添加一个别名,但不确定在哪里。

如果我删除最后两个 JOIN 语句,一切都会按预期进行。

谢谢

最佳答案

如果多次连接同一个表,则需要使用唯一的别名:

SELECT product_id, product_name, 
    product_download, product_submittal, 
    product_ordering_guide, product_status, 
    d1.download_id DownloadId, 
    d1.download_name DownloadName,
    d2.download_id SubmittalDownloadId, 
    d2.download_name SubmittalDownloadName,
    d3.download_id GuideDownloadId, 
    d3.download_name GuideDownloadName
FROM tbl_products
LEFT JOIN tbl_downloads d1
    ON tbl_products.product_download=d1.download_id
LEFT JOIN tbl_downloads d2
    ON tbl_products.product_submittal=d2.download_id
LEFT JOIN tbl_downloads d3
    ON tbl_products.product_order_guide=d3.download_id

例如,我使用了 d1d2d3,但您可能希望在别名中更具描述性,以便清楚每个别名的含义join 是这样做的,像这样:

SELECT product_id, product_name, 
    product_download, product_submittal, 
    product_ordering_guide, product_status, 
    download.download_id DownloadId, 
    download.download_name DownloadName,
    submittal.download_id SubmittalDownloadId, 
    submittal.download_name SubmittalDownloadName,
    guide.download_id GuideDownloadId, 
    guide.download_name GuideDownloadName
FROM tbl_products
LEFT JOIN tbl_downloads download
    ON tbl_products.product_download=download.download_id
LEFT JOIN tbl_downloads submittal
    ON tbl_products.product_submittal=submittal.download_id
LEFT JOIN tbl_downloads guide
    ON tbl_products.product_order_guide=guide.download_id

关于mysql - SQL JOINS 和命名连接列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14484848/

相关文章:

mysql - 从 ACTUAL 值左连接 MIS-MATCH

mysql按单列分组但在多列上聚合?

MYSQL SELECT random on large table ORDER BY SCORE

php - 插入 MySQL 表到单独的行

sql - "/"在 PL/SQL 中做什么?

sql - 应该使用什么类型的 Transaction IsolationLevel 来忽略插入但锁定选定的行?

mysql - 经典 ASP 和 MySQL 数据库 - 我想使用 if then 和 else 语句在表单上添加年龄限制。这可能吗?

mysql - 我想在 mysql workbench 表中同一列的同一字段中有 2 个不同的值?

mySQL 左连接多个表

mysql - LEFT JOIN 与所有连接表的 id 列