【发布时间】:2015-09-11 10:27:45
【问题描述】:
我正在尝试对下面的数据库结构进行查询。
基本上,当 tbuser 表中的注册用户进入系统时,系统会在 tbuser_logger 表中生成一个元组(获取其 id)。然后,用户可以在 tbprojeto 表中创建一个项目。之后在 tbdataid 表中创建一个元组,其中保存了创建项目的 id 和之前在 tbuser_logger 表中创建的元组的 id,或者是当时登录的用户信息以及他正在使用的项目。
所有其他系统表,如 tbcliente、tbinstituições、tbcar、tbhome 等,都有一个指向 tbdataid 表的外键,因此每个记录的数据都会包含有关哪个项目和哪个用户的信息。
我正在尝试挂载 SQL 以将某个用户在项目中记录的所有数据带出项目。因此(只有两个表):
SELECT
t1.datProj_Id,
t2.projNome,
t3.instNome,
t4.cltNome
FROM
tbdataid t1
LEFT JOIN tbprojeto t2 ON (t1.datId = t2.projDat_Id)
LEFT JOIN tbinstituicao t3 ON (t1.datId = t3.instDat_Id)
LEFT JOIN tbcliente t4 ON (t1.datId = t4.cltDat_Id)
LEFT JOIN tbuser_logger t5 ON (t1.datUsrLog_Id = t5.usrLogId)
LEFT JOIN tbuser t6 ON (t5.usr_Id = t6.usrId)
WHERE
(t1.datProj_Id = 12 AND t6.usrId = 8)
OR (t1.datProj_Id IS NULL AND t6.usrId = 8)
我的查询带来了我想要的数据,因此在填充树视图之后。但是查询有很多元组null,这是正常的。那么如何改进或改进这个查询来简化树视图的构建呢?按照下面的结果:
如果我只有一个 datid 值,如“1”下方的图像,我将有很多重复的元组,数据库大小很小,给我带来大约 96k。我可以比较之前不放树视图重复结果,但是这是对 deplhi 中数据集的一个大查询。
【问题讨论】:
-
您要解决什么问题?你说你得到了正常的结果,那么你对查询有什么样的改进?您现在在构建树视图时遇到了什么困难?
-
@RobKennedy 我想删除查询中的空元组以减小数据集大小。所以,我总是会在 projNome 列中有一个非空值,例如,很多 instNome 和 cltNome 非空值。
-
这个问题和Delphi有什么关系? 100% 与 SQL 有关。
-
@KenWhite 是的,对此很抱歉,我将 delphi 标签思想放在一个清晰的查询中以填充树视图。当我只有唯一的 dataid 值时,我编辑了我的问题,显示了另一种情况。
标签: mysql join treeview mysql-workbench