【发布时间】:2021-04-28 14:49:39
【问题描述】:
我得到了hmmd_prm 表:
| id | hmmd_id | prm1 | prm2 | prm3 | prm4 | prm5 | prm6 | prm7 | prm8 | prm9 | prm10 |
| 1 | 2 | 1 | 2 | 3 | 1 | 2 | 3 | 1 | 2 | null | null |
| 2 | 3 | 4 | 3 | 2 | 1 | 4 | 3 | 2 | 1 | 4 | 3 |
和lab_prm 表是:
| prm_id | prm_adi | prm_adgr | prm_udgr | prm_birim | prm_ctrl |
| 1 | pH |
| 2 | O2 |
| 3 | peroxide |
| 4 | hum |
和 main_hmmd 表,该表具有名称并使用 hmmd_id 提取名称
我试图得到这样的结果:
| id | hmmd_id | prm1 | prm2 | prm3 | prm4 | prm5 | prm6 | prm7 | prm8 | prm9 | prm10 |
| 1 | BUGDAY | pH | O2 | prxide | pH | O2 | prxide | pH | O2 | null | null |
我正在使用这样的东西:
SELECT hp.id, mh.hmmd_adi, lp1.prm_adi, lp2.prm_adi, lp3.prm_adi, lp4.prm_adi, lp5.prm_adi, lp6.prm_adi, lp7.prm_adi, lp8.prm_adi, lp9.prm_adi, lp10.prm_adi
FROM std_tbl_hmmd_prm AS hp
INNER JOIN std_tbl_main_hmmd AS mh ON mh.id = hp.hmmd_id
INNER JOIN std_tbl_lab_prm AS lp1 ON hp.prm1 = lp1.prm_id
INNER JOIN std_tbl_lab_prm AS lp2 ON hp.prm2 = lp2.prm_id
INNER JOIN std_tbl_lab_prm AS lp3 ON hp.prm3 = lp3.prm_id
INNER JOIN std_tbl_lab_prm AS lp4 ON hp.prm4 = lp4.prm_id
INNER JOIN std_tbl_lab_prm AS lp5 ON hp.prm5 = lp5.prm_id
INNER JOIN std_tbl_lab_prm AS lp6 ON hp.prm6 = lp6.prm_id
INNER JOIN std_tbl_lab_prm AS lp7 ON hp.prm7 = lp7.prm_id
INNER JOIN std_tbl_lab_prm AS lp8 ON hp.prm8 = lp8.prm_id
INNER JOIN std_tbl_lab_prm AS lp9 ON hp.prm9 = lp9.prm_id
INNER JOIN std_tbl_lab_prm AS lp10 ON hp.prm10 = lp10.prm_id
它按我的意愿工作,但我很确定有更好的解决方案。
我怎样才能让这更简单?
提前致谢。
更新:
我想要实现的是,在 hmmd_prm 表中,我有一些材料为hmmd_id,用户将对这些参数应用一些参数。我为参数设置了 10 列,因此用户最多可以分配 10 个参数,但也可以分配 1 或 2 个参数,其余为空。
这可能不是最好的解决方案,因为这是我第一次做这样的事情,但我只是不希望结果显示为每行中具有不同参数的相同材料的多个条目,如下所示。
| id | hmmd_id | prms |
| 1 | 2 | 1 |
| 2 | 2 | 2 |
| 3 | 2 | 3 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
| 6 | 2 | 3 |
| 7 | 2 | 1 |
【问题讨论】:
-
我认为您希望在那里进行左连接——正如所写的那样,查询不会给出这些结果(除了示例中没有所有数据。)
-
你是对的!我想我错过了解决这个烂摊子的更好方法
-
我不认为这是一团糟——在这种情况下左连接在关系数据模型中是可以接受的,并且如果您的数据库配置正确,则性能良好。我个人总是这样做,不做似乎总是表现更差的支点。
标签: sql sql-server inner-join