【问题标题】:Query values from two tables with same ID从具有相同 ID 的两个表中查询值
【发布时间】:2016-08-17 14:50:30
【问题描述】:

我目前有一个包含两个表 tc_servicestc_game_services 的数据库,其中包含有关同一服务的不同信息。它们都由 service_id 字段标识,我需要从一个字段中提取 billing_id 并从另一个字段中提取 game_id

现在我在其他问题中找到了一些示例,但是在运行时,它们只是为我提供了每个服务的这两个值的列表,而不是我尝试查询的特定值。

我需要在这个查询中更正什么?

SELECT
  tcservices.billing_id,
  tcgameservices.game_id
FROM tc_services AS tcservices
INNER JOIN tc_game_services AS tcgameservices ON tcservices.service_id = '1812';

【问题讨论】:

  • 不要使用应该在 WHERE 子句中的 tcservices.service_id = '1812',而是尝试使用 tcservices.service_id = tcgameservices.service_id
  • 表别名几乎和表名一样长...我会节省一些输入,例如 tcs 和 tcgs。

标签: mysql sql join inner-join


【解决方案1】:

这是非常基本的 SQL。您没有在这些表上指定连接条件。正如您所提到的,您的常用专栏是service_id。使用此条件连接两个表,然后在 WHERE 子句中将逻辑用于检索特定 service_id 的记录。

SELECT
  tcservices.billing_id,
  tcgameservices.game_id
FROM tc_services AS tcservices
INNER JOIN tc_game_services AS tcgameservices ON tcservices.service_id = tcgameservices.service_id
WHERE tcservices.service_id = '1812';

解释您的方法的行为(下一行):您从tc_services 中提取了符合条件service_id = '1812' 的每条记录,然后将其与来自tc_gameservices 的每条记录交叉连接。这就是你得到结果的方式。

INNER JOIN tc_game_services AS tcgameservices ON tcservices.service_id = '1812'

我建议减少表格别名的长度以节省一些输入并使代码看起来更整洁。这在处理更大更复杂的查询时可能特别有用。

附带说明,如果您的 service_idInteger 数据类型,那么您不需要在值周围加上单引号。

【讨论】:

  • 感谢您非常详细的回复,非常感谢。我从来没有真正使用过 JOIN 语句,因此总是找到解决方法。这使它变得非常简单,将来会派上用场!
【解决方案2】:
SELECT
  tcservices.billing_id,
  tcgameservices.game_id
FROM tc_services AS tcservices
INNER JOIN tc_game_services AS tcgameservices ON tcservices.service_id = tcgameservices.service_id 
 where tcservices.service_id = '1812';

【讨论】:

  • 非常感谢,就是这样。
【解决方案3】:

使用ON 指定两者之间的关系,因此service_id 上的相等然后使用WHERE 过滤结果:

SELECT
  tcservices.billing_id,
  tcgameservices.game_id
FROM tc_services AS tcservices
INNER JOIN tc_game_services AS tcgameservices ON tcservices.service_id = tcgameservices.service_id
WHERE tcservices.service_id = 1812

【讨论】:

    【解决方案4】:

    我认为您应该在 WHERE 子句中搜索 ID,并在 INNER JOIN 中指定要加入的列。

    SELECT tcservices.billing_id, tcgameservices.game_id
    FROM tc_services AS tcservices
    INNER JOIN tc_game_services AS tcgameservices ON tcservices.service_id = tcgameservices.service_id
    WHERE tcservices.service_id = '1812';
    

    【讨论】:

      猜你喜欢
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 2021-04-11
      相关资源
      最近更新 更多