复杂的sql连接查询

Posted

技术标签:

【中文标题】复杂的sql连接查询【英文标题】:complicate sql join query 【发布时间】:2014-03-14 23:06:20 【问题描述】:

我需要合并 2 个表格并显示一个表格。

我已经用 php 做了,但我想用 SQL 本身做。

表 1:venki

code  subject
10    english
11    tamil
12    history

表 2:venki2

num opt1 opt2 opt3 allot 
f41  12    11   10   12

我需要显示一个包含num.venki2opt1opt2opt3allot 列的表格(5 列)。最后 4 列的值必须取自表 1,例如: f41 ,历史。泰米尔语,英语,历史。

【问题讨论】:

加入表需要一些参考键,那么你在两个表之间的参考键是什么? 【参考方案1】:
SELECT t2.num 
      ,J1.[Subject] AS Opt1
      ,J2.[Subject] AS Opt2
      ,J3.[Subject] AS Opt3
      ,J4.[Subject] AS allot
FROM venki2 t2 LEFT JOIN venki J1
ON t2.opt1 = J1.Code
LEFT JOIN venki J2
ON t2.opt2 = J2.Code
LEFT JOIN venki J3
ON t2.opt3 = J3.Code
LEFT JOIN venki J4
ON t2.allot = J4.Code

在主题周围使用方括号,因为它是 sql server 中的key word

Working SQL FIDDLE

【讨论】:

【参考方案2】:
select venky2.num, TBLOPT1.[subject], 
TBLOPT2.[subject], TBLOP3.[subject], 
TBLALLOT.[subject]  
from venky2, venky as TBLOPT1, venky as TBLOPT2, venky as TBLOP3, venky as TBLALLOT
left join TBLOPT1 on venky2.opt1=TBLOPT1.code
left join TBLOPT2 on venky.opt2=TBLOPT2.code
left join TBLOP3 on venky2.opt3=TBLOP3.code
left join TBLALLOT on venky2.allot=TBLALLOT.code

【讨论】:

代码中的错误 - 关键字“as”附近的语法不正确。 - 在 venky2.opt1=venky.code 上左加入 venky 作为 TBLOPT1 JOINING 不在ON 子句中的表时,需要给表起别名。 对不起,如果我写了一个错误的代码,我已经编辑了它,一个迟到的编辑,但只是为了正确起见

以上是关于复杂的sql连接查询的主要内容,如果未能解决你的问题,请参考以下文章

具有复杂连接的sql查询

SQL 查询中表的复杂连接

将具有许多连接的复杂 SQL 查询转换为 Eloquent

「MySQL」- 复杂的SQL查询语句

复杂的 SQL 连接查询 - 获取最新行

连接两个表的复杂 SQL 查询