Mysql 我对联接表的查询是否有错误代码?
我真的对这些代码感到困惑。我有这样的疑问Mysql 我对联接表的查询是否有错误代码?,mysql,sql,Mysql,Sql,我真的对这些代码感到困惑。我有这样的疑问 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `aIPK` AS select `ipbmst_fakultas`.`Kode` AS `Fakultas`, `ipbmst_departemen`.`Kode` AS `Departemen`, `akdmst_mahasiswamagister`.`NIM` AS `NIM`, `akd
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `aIPK` AS select
`ipbmst_fakultas`.`Kode` AS `Fakultas`,
`ipbmst_departemen`.`Kode` AS `Departemen`,
`akdmst_mahasiswamagister`.`NIM` AS `NIM`,
`akdmst_mahasiswamagister`.`TahunMasuk` AS `TahunMasuk`,
`akdhis_kelanjutanstudi`.`IPK` AS `IPK`
from (((((`akdmst_mahasiswamagister` left join `akdmst_mayor` on((`akdmst_mahasiswamagister`.`MayorID` = `akdmst_mayor`.`ID`)))
left join `ipbmst_departemen` on((`akdmst_mayor`.`DepartemenID` = `ipbmst_departemen`.`ID`)))
left join `ipbmst_fakultas` on((`ipbmst_departemen`.`FakultasID` = `ipbmst_fakultas`.`ID`)))
left join `ipbmst_orang` on((`akdmst_mahasiswamagister`.`NIM` = `ipbmst_orang`.`NIMS2Key`)))
left join `akdhis_kelanjutanstudi` on((`akdhis_kelanjutanstudi`.`NIM` = `ipbmst_orang`.`NIMS2Key`)))
WHERE `akdhis_kelanjutanstudi`.`IPK` IS NOT NULL
order by NIM
LIMIT 100;
但“IPK”结果为空,实际上IPK有它的值。那些代码怎么了
以下是我的表格结构:
table 1: akdmst_mahasiswamagister (ID, MahasiswaID, NIM, MayorID, TahunMasuk)
table 2: akdmst_mayor(ID, DepartemenID)
table 3: ipbmst_departemen(ID, FakultasID, DepartmenName)
table 4: ipbmst_fakultas(ID, FacultyName)
table 5: ipbmst_orang(ID, Name, NIMS2Key)
table 6: akdhis_kelanjutanstudi(ID, NIM, IPK)
关于这个查询,我还有另一个问题。查询视图花费了太多时间。我想可能是因为表akdhis_Kelanjutani包含了超过300K的数据记录。我用过“限制100”,但还是一样。您能帮我解决这个问题吗?我不知道确切的问题是什么,但是您的
WHERE
子句有一个问题:
WHERE IPK IS NOT NULL
不允许在WHERE
子句中引用列别名,因为其值可能尚未确定。相反,您应该使用以下选项:
WHERE akdhis_kelanjutanstudi.IPK IS NOT NULL
更新:
在原始视图中使用的括号看起来很奇怪、不必要,而且可能是错误的。尝试使用以下方法:
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost`
SQL SECURITY DEFINER VIEW aIPK AS
SELECT t4.Kode AS Fakultas,
t3.Kode AS Departemen,
t1.NIM AS NIM,
t1.TahunMasuk AS TahunMasuk,
t6.IPK AS IPK
FROM akdmst_mahasiswamagister t1
LEFT JOIN akdmst_mayor t2
ON t1.MayorID = t2.ID
LEFT JOIN ipbmst_departemen t3
ON t2.DepartemenID = t3.ID
LEFT JOIN ipbmst_fakultason t4
ON t3.FakultasID = t4.ID
LEFT JOIN ipbmst_orang t5
ON t1.NIM = t5.NIMS2Key
LEFT JOIN akdhis_kelanjutanstudi t6
ON t6.NIM = t5.NIMS2Key
WHERE t6.IPK IS NOT NULL
ORDER BY NIM
LIMIT 100;
运行sql而不是创建算法更易于测试 在您的情况下,请检查join中的条件
在(`akdhis_kelanjutanstudi`.`NIM`=`ipbmst_orang`.`NIMS2Key`)上)
你也需要改变
其中,`akdhis_kelanjutanstudi`.`IPK`不为空
到
其中'IPK'不为空
您的描述有误
你的桌子是空的
表1:akdhis_mahasiswamagister(ID、MahasiswaID、NIM、MayorID、Tahumanasuk)
表2:akdmst_市长(ID,部门ID)
表3:ipbmst_部门(ID、FakultasID、部门名称)
表4:ipbmst_fakultas(ID,学院名称)
表5:ipbmst_orang(ID、名称、NIMS2键)
表6:akdhis_Kelanjutani研究(ID、NIM、IPK)
但我在你的选择中没有看到“akdhis_mahasiswamagister”表
创建算法=未定义的定义器=根
@localhost
SQL安全定义器视图aIPK
AS select
ipbmst\u fakultas
Kode
ASfakultas
,
ipbmst\U部门
Kode
作为部门
,
akdmst\u mahasiswamagister
NIM
ASNIM
,
akdmst_mahasiswamagister
tahumansuk
AStahumansuk
,
akdhis_kelanjutani研究
IPK
ASIPK
从((akdmst\u mahasiswamagister
内部连接akdmst\u mayor
on(akdmst\u mahasiswamagister
MayorID=akdmst\u mayor
ID
)开始)
内部联接ipbmst\u部门
on(akdmst\u市长departmentId
=ipbmst\u部门ID
))
内部连接(ipbmst\u fakultas
on(ipbmst\u部门
FakultasID
=ipbmst\u fakultas
))
内部连接(akdmst\u mahasiswamagister
NIM
=ipbmst\u orang
NIMS2Key
))
内部联接akdhis_kelanjutanstudi
on(akdhis_kelanjutanstudi
NIM
=ipbmst\u orang
NIMS2Key
))
其中IPK不为NULL
尼姆的命令
上限为100
akdhis_mahasiswamagister和akdmst_mahasiswamagister是不同的?可能您使用了错误的表格,因此您的信息不正确是的,我输入了这样的代码,但仍然不工作仍然不工作
是什么意思?你能说得更具体些吗?我的意思是数据获取花费了这么多时间。可能是因为表akdhis_kelanjutanstudi包含了超过300K的数据。你能帮我解决那个问题吗?是的。我刚才的描述有误。我已经编辑了我的问题。表1为akdmst_mahasiswamagister。没有akdhis_mahasiswamagister表。所以我不会用错桌子。我只是打错了描述