我需要了解一些关于MySQL链接的事情。 有我暴露的问题:
我在IT支持服务部工作,我正在制作一个IP管理网站托管面板。
这是我的表格:
这是我的代码
SELECT *
FROM IP
INNER JOIN VLAN ON IP.GATEWAY = VLAN.GATEWAY
INNER JOIN SCHOOLBUILDING ON VLAN.SCHOOLBUILDING = SCHOOLBUILDING.NAME
INNER JOIN SCHOOL ON SCHOOLBUILDING.SCHOOLNAME = SCHOOL.NAME
WHERE SCHOOL.NAME = 'mySchoolName'
当我运行此操作时,我只获得了1条记录,这是表IP的最后一条。
我深深地暴露了我的问题:
仪表板页面,您选择城市的一部分
学校建筑选择页面
VLAN选择
答案 0 :(得分:0)
您在VLAN和IP之间的联接不正确,字段名称为IP_GATEWAY
,而不仅仅是GATEWAY
SELECT *
FROM IP i
INNER JOIN VLAN v ON I.IP_GATEWAY = V.IP_GATEWAY
INNER JOIN SCHOOLBUILDING SB ON V.SCHOOLBUILDING = SB.NAME
INNER JOIN SCHOOL S ON SB.SCHOOLNAME = S.NAME
WHERE S.NAME = 'mySchoolName'
此外,如果此仍然不起作用,那么我将FULL OUTER JOINS
用于所有这些并向后工作。
SELECT *
FROM IP i
FULL OUTER JOIN VLAN v ON I.IP_GATEWAY = V.IP_GATEWAY
FULL OUTER JOIN SCHOOLBUILDING SB ON V.SCHOOLBUILDING = SB.NAME
FULL OUTER JOIN SCHOOL S ON SB.SCHOOLNAME = S.NAME
WHERE S.NAME = 'mySchoolName'
答案 1 :(得分:0)
你可能想要OUTER而不是INNER连接: 即使没有VLAN / IP,此特定学校的所有详细信息。
SELECT *
FROM IP
RIGHT JOIN VLAN ON IP.GATEWAY = VLAN.GATEWAY
RIGHT JOIN SCHOOLBUILDING ON VLAN.SCHOOLBUILDING = SCHOOLBUILDING.NAME
RIGHT JOIN SCHOOL ON SCHOOLBUILDING.SCHOOLNAME = SCHOOL.NAME
WHERE SCHOOL.NAME = 'mySchoolName'
由于大多数人更喜欢LEFT联接(更容易理解,因此从最重要的表开始):
SELECT *
FROM SCHOOL
LEFT JOIN SCHOOLBUILDING
ON SCHOOLBUILDING.SCHOOLNAME = SCHOOL.NAME
LEFT JOIN VLAN
ON VLAN.SCHOOLBUILDING = SCHOOLBUILDING.NAME
LEFT JOIN IP
ON IP.GATEWAY = VLAN.GATEWAY
WHERE SCHOOL.NAME = 'mySchoolName'