Mysql SQL联接和命名联接列
我有一个产品表和下载表 下载表有4个字段,ID、名称、类别和下载 Products表有3个特定于下载的字段:下载、订单指南和提交表。每个字段都存储下载表中记录的ID。产品表中的这3个字段永远不会有相同的下载ID值 我有以下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
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等中使用别名引用表:)