gpt4 book ai didi

mysql - 当一个表中的多行与另一个表中的一行相关时,在 MySQL 中连接两个表

转载 作者:行者123 更新时间:2023-11-30 22:59:48 24 4
gpt4 key购买 nike

我有两个表,module_configmodule_settings .后者包含具有默认值的行,前者包含将覆盖默认值的行。

我在这个 fiddle 中创建了包含一些测试行的表:http://sqlfiddle.com/#!2/ad4eb .

这是我的规范:

1) 我想提供 gid 的列表秒。例如,提供 100 , 24 , 48 , 50 .2) 我希望查询为每个 module_settings 的每个设置(在 gid 中给出)返回一行.它应该忽略任何 module_settings行在哪里 module_settings.gid_specific等于0 .3) value将等于 module_config 中给出的相应值如果该行存在,否则 initial module_settings 中给出的值.

有了上面的 fiddle ,我想要一些可以返回以下内容的东西(对于上面 4 个 gid 值的输入):

| mid----- | gid | name-------- | value |
| currency | 100 | hand_default | 12--- |
| currency | 24- | hand_default | 17--- |
| currency | 48- | hand_default | 29--- |
| currency | 50- | hand_default | 0---- |
| currency | 100 | bank_default | 0---- |
| currency | 24- | bank_default | 0---- |
| currency | 48- | bank_default | 0---- |
| currency | 50- | bank_default | 0---- |

因此,它首先找到 module_settings 中的所有行其中 gid_specific等于 1。这些行通过具有 mid 的唯一组合而不同和 name .之后,它为每个 gid 的每个设置返回一行。 .所以对于 module_setting行在哪里 mid等于 currencyname等于 hand_default ,它将返回 4 行,每行一个 gid100 , 24 , 4850 .剩下要做的唯一一件事就是决定将什么值与该行相关联。如果 module_config 中存在一行其中 module_config.sid等于 module_settings.idmodule_config.gidgid有问题,然后使用 module_config.value 给出的值,否则使用 module_settings.initial 给出的默认值.

如您所见,我已经在脑海中形成了它,但我就是无法将其放入查询语句中。如果有人能阐明一些问题,我将不胜感激。

最佳答案

我使用过 Teradata SQL。我相信如果您尝试,您可以找到 SQL 的等效语法。

除了您的两个表之外,我还使用了一个 tbl3 作为 gid 的来源,您说它来自 PHP 数组。

第 1 步:交叉连接 module_settingsmodule_config

SELECT mid,gid,name, b.value1
FROM IBB_APP.module_settings a, IBB_APP.module_config b
WHERE gid_specific = 1;

这个结果是

mid                                       gid  name                              value1
-------------------------------- ----------- -------------------------------- ----------
currency 100 hand_default 12
currency 24 hand_default 17
currency 48 hand_default 29
currency 100 bank_default 12
currency 24 bank_default 17
currency 48 bank_default 29

第 2 步。包括 tbl3,它也给出了 gid = 50。

SELECT mid,c.gid,name, 
CASE WHEN b.gid = c.gid THEN b.value1
WHEN b.gid IS NULL THEN a.initial1 END AS value1
FROM IBB_APP.module_settings a, IBB_APP.module_config b
RIGHT OUTER JOIN IBB_APP.tbl3 c ON (b.gid = c.gid)
WHERE gid_specific = 1
ORDER BY name,c.gid;

结果是

mid                                       gid  name                              value1
-------------------------------- ----------- -------------------------------- ----------
currency 24 bank_default 17
currency 48 bank_default 29
currency 50 bank_default 0
currency 100 bank_default 12
currency 24 hand_default 17
currency 48 hand_default 29
currency 50 hand_default 0
currency 100 hand_default 12

我希望这对您有所帮助,并且我正确理解了您的要求。

关于mysql - 当一个表中的多行与另一个表中的一行相关时,在 MySQL 中连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24600267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com