Sql 基于在每个表中以不同名称显示的两个公共列连接两个表
以下是表格示例: 客户Sql 基于在每个表中以不同名称显示的两个公共列连接两个表,sql,Sql,以下是表格示例: 客户 ╔══════════╦════════════╗ ║ GROUP_ID ║ GROUP_NAME ║ ╠══════════╬════════════╣ ║ abc ║ xex ║ ║ def ║ tet ║ ╚══════════╩════════════╝ ╔════════╦════════════╗ ║ ACT_ID ║ GROUP_NAME ║ ╠════════╬════════════╣ ║ 44
╔══════════╦════════════╗
║ GROUP_ID ║ GROUP_NAME ║
╠══════════╬════════════╣
║ abc ║ xex ║
║ def ║ tet ║
╚══════════╩════════════╝
╔════════╦════════════╗
║ ACT_ID ║ GROUP_NAME ║
╠════════╬════════════╣
║ 44 ║ xex ║
║ 32 ║ tet ║
╚════════╩════════════╝
╔════╦════════════╗
║ ID ║ STATE ║
╠════╬════════════╣
║ 44 ║ complete ║
║ 58 ║ incomplete ║
╚════╩════════════╝
团队
╔══════════╦════════════╗
║ GROUP_ID ║ GROUP_NAME ║
╠══════════╬════════════╣
║ abc ║ xex ║
║ def ║ tet ║
╚══════════╩════════════╝
╔════════╦════════════╗
║ ACT_ID ║ GROUP_NAME ║
╠════════╬════════════╣
║ 44 ║ xex ║
║ 32 ║ tet ║
╚════════╩════════════╝
╔════╦════════════╗
║ ID ║ STATE ║
╠════╬════════════╣
║ 44 ║ complete ║
║ 58 ║ incomplete ║
╚════╩════════════╝
行动
╔══════════╦════════════╗
║ GROUP_ID ║ GROUP_NAME ║
╠══════════╬════════════╣
║ abc ║ xex ║
║ def ║ tet ║
╚══════════╩════════════╝
╔════════╦════════════╗
║ ACT_ID ║ GROUP_NAME ║
╠════════╬════════════╣
║ 44 ║ xex ║
║ 32 ║ tet ║
╚════════╩════════════╝
╔════╦════════════╗
║ ID ║ STATE ║
╠════╬════════════╣
║ 44 ║ complete ║
║ 58 ║ incomplete ║
╚════╩════════════╝
请注意,表teams
中的act\u id
也以id
我想选择一个包含两列的表:group\u id
和group\u name
,其中每个group\u name
都有一个act\u id
,该id具有完整的状态
我在做一些事情,比如:
SELECT group_id AND group_name
FROM clients
WHERE group_name IN (SELECT group_name
FROM teams, actions
WHERE teams.act_id = actions.id
AND actions.state IS complete)
这是正确的吗
我也想到了类似的事情
SELECT group_id AND group_name
FROM clients
WHERE group_name IN (SELECT group_name
FROM teams
WHERE act_id IN (SELECT id
FROM actions
WHERE teams.act_id = actions.id.
AND state IS complete))
以上哪一项是正确的
我想要的桌子显然是这个:
╔══════════╦════════════╗
║ GROUP_ID ║ GROUP_NAME ║
╠══════════╬════════════╣
║ abc ║ xex ║
╚══════════╩════════════╝
您在sql查询中看到的星号*
意味着它将选择“可用”中的所有列,在这种情况下,它将从表客户机中选择所有列。如果要仅为特定列选择,请使用逗号
分隔not和
。例如
SELECT a.GROUP_ID, a.GROUP_NAME
FROM clients a
INNER JOIN teams b
ON a.group_name = b.group_name
INNER JOIN actions c
ON b.act_ID = c.id
WHERE c.state = 'complete'
要进一步了解加入的更多信息,请访问以下链接:
非常感谢您回答JW。您使用的a、b和c只是随机分配给每个表的名称,以便您可以轻松地识别它们并在查询中区分它们,对吗?您也可以使用我自己更详细的格式(不使用连接,只使用WHERE,IN,IS,IS,NOT,=)给我上面的查询,以便我更好地理解您在做什么?或者说,没有连接是不可能的?再次感谢,我一定会看看连接。a、b、c
被称为ALIAS
(或人名的昵称)。有许多可能的查询来实现特定的结果。我最喜欢的方法是使用JOIN
。也可以使用EXISTS
完成此操作<代码>;)代码>