将8个表组合成1个查询

Sta*_*ark -3 sql join

嘿,在我最近开始的一个项目中,我很高兴.

我有8个表需要连接,以便所有表内容将显示1个单一查询

但我努力想出正确的查询,因为我对SQL很新

我已经制作了一个数据库图表,显示了密钥彼此之间的关系,不介意那些没有分配箭头的信息.

图

所以基本上我只想加入所有8个表,这样我就可以通过php脚本编写例如.

$ result = mysql_query("SQL");

$ row = mysql_fetch_array($ result);

$ id = $ row ["value"]; 当然我会使用某种循环来显示多个项目

它将以我的首页上的多个项目结束,这些项目应该由该类别中的最新项目显示,我希望并假设这是一个简单的连接位置.

但总而言之,我正在寻找的是一个SQL,它将8个表与1个查询连接起来,这样我就可以使用8个表中任意一个的任何信息.

我想我找到了一个有效的解决方案

SELECT *
FROM Deal d
INNER JOIN DealPrice dp ON d.Id = dp.DealId
LEFT JOIN DealMedia dm ON d.Id = dm.DealId
LEFT JOIN StorageFile sf ON dm.Id = sf.binId AND sf.name = 'original_t'
LEFT JOIN DealLocation dl ON d.Id = dl.dealid
LEFT JOIN Location l ON dl.location = l.id
LEFT JOIN DealCategoryAssoc dca ON d.Id = dca.DealId
LEFT JOIN DealCategory dc ON dca.CategoryId = dc.id
LEFT JOIN I18N i ON dc.id = i.relatedId AND i.model = 'DealCategory' AND i.language = 'da_dk'
Run Code Online (Sandbox Code Playgroud)

我发现还有另一个表DealLocation我没有进入我的图表因此我自己改变了一些代码

Wha*_*ied 5

我会在这个场景中使用a INNER JOINover LEFT JOIN,因为左连接将返回左表中的所有记录,即使右表中没有匹配,我认为你不想要 - 很难从问题中看出来

看看我最喜欢的Joins视觉描述

SELECT i18n.relatedid, 
       dealcategory.id, 
       dealcategoryassoc.dealid, 
       deal.location, 
       dealprice.pricevalue, 
       dealmedia.description, 
       location.city, 
       storagefile.extension, 
       storagefile.name, 
       storagefile.hash 
FROM   i18n 
       INNER JOIN dealcategory 
               ON i18n.relatedid = dealcategory.id 
       INNER JOIN dealcategoryassoc 
               ON dealcategory.id = dealcategoryassoc.categoryid 
       INNER JOIN deal 
               ON dealcategoryassoc.dealid = deal.id 
       INNER JOIN dealprice 
               ON deal.id = dealprice.dealid 
       INNER JOIN dealmedia 
               ON dealprice.dealid = dealmedia.dealid 
       INNER JOIN storagefile 
               ON dealmedia.id = storagefile.bindid 
       INNER JOIN location 
               ON deal.location = location.id 
Run Code Online (Sandbox Code Playgroud)

  • +1实际使用列名称 (2认同)