查询具有相同ID的两个表的值

时间:2016-08-17 14:50:30

标签: mysql sql join inner-join

我目前有一个包含两个表 tc_services tc_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';

4 个答案:

答案 0 :(得分:4)

这是非常基本的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的{​​{1}}中提取了每条记录,然后将其与每条记录交叉加入service_id = '1812'。这就是你得到结果的方式。

tc_gameservices

我建议缩短表别名的长度以节省一些打字并使代码看起来更整洁。在处理更大和更复杂的查询时,这可能会特别有用。

作为旁注,如果您的INNER JOIN tc_game_services AS tcgameservices ON tcservices.service_id = '1812' 属于service_id数据类型,那么您不需要围绕该值使用单引号。

答案 1 :(得分:0)

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';

答案 2 :(得分:0)

使用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

答案 3 :(得分:0)

我认为您应该在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';