Mysql SQL联接和命名联接列

Mysql SQL联接和命名联接列,mysql,sql,left-join,Mysql,Sql,Left Join,我有一个产品表和下载表 下载表有4个字段,ID、名称、类别和下载 Products表有3个特定于下载的字段:下载、订单指南和提交表。每个字段都存储下载表中记录的ID。产品表中的这3个字段永远不会有相同的下载ID值 我有以下SQL语句: SELECT product_id, product_name, product_download, product_submittal, product_ordering_guide, product_status, tbl_downloads.download

我有一个产品表和下载表

下载表有4个字段,ID、名称、类别和下载

Products表有3个特定于下载的字段:下载、订单指南和提交表。每个字段都存储下载表中记录的ID。产品表中的这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' #1066-非唯一表/别名:“tbl_下载” 这个错误是有道理的,我知道它会发生,但我不知道如何修复它。我需要添加别名,但不确定在哪里

如果删除最后两个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
例如,我使用了
d1
d2
d3
,但您可能希望在别名中更具描述性,这样就可以清楚地了解每个连接的作用,如下所示:

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

如果要多次加入同一个表,则需要使用唯一别名:

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
例如,我使用了
d1
d2
d3
,但您可能希望在别名中更具描述性,这样就可以清楚地了解每个连接的作用,如下所示:

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

非常感谢。这里是否暗示了“AS”?为什么我不在下载信息的前面加上SELECT中的表名呢statement@Brett不需要将
作为表的别名。使用别名后,您必须在“选择、位置等”中使用别名引用表:)谢谢!这里是否暗示了“AS”?为什么我不在下载信息的前面加上SELECT中的表名呢statement@Brett不需要将
作为表的别名。使用别名后,必须在select、where等中使用别名引用表:)