1

大家好!

我在正确从数据库中获取结果时遇到问题。我有很多桌子,但这现在并不重要。我有一张看起来像这样的桌子:

***PUBLISHER_DEVELOPER table***
pd_id : [int] AUTO PRIMARY
pd_name: [varchar]
pd_type: [integer] (0,1 or 2)

***GAME_INFO table***
g_id: [int] AUTO PRIMARY
g_label: [varchar]
g_publisher: [integer]
g_developer: [integer]

表之间的连接是这样的:

PUBLISHER_DEVELOPER : GAME_INFO = 1:LOT

我想以发行商和开发者的正常名称获取游戏信息,但我总是返回零行。

我的 SQL 查询:

*SELECT pd_name, pd_name, g_label FROM PUBLISHER_DEVELOPER,GAME_INFO WHERE pd_id = g_publisher AND pd_id = g_developer*

知道我做错了什么吗?

4

3 回答 3

1

可能发行商和开发商不同。第一个表与 g_publisher 或 g_developer 之间应该存在关系。

SELECT pd_name, pd_name, g_label FROM PUBLISHER_DEVELOPER INNER JOIN GAME_INFO ON pd_id = g_publisher

SELECT pd_name, pd_name, g_label FROM PUBLISHER_DEVELOPER INNER JOIN GAME_INFO ON pd_id = g_developer

或者

SELECT pd_name, pd_name, g_label FROM PUBLISHER_DEVELOPER LEFT OUTER JOIN GAME_INFO ON pd_id = g_publisher
于 2013-05-29T17:13:08.347 回答
0

假设您想要两个连接到PUBLISHER_DEVELOPER表以同时取回发布者和开发者。

SELECT p.pd_name AS p_name, d.pd_name AS d_name, g_label
FROM GAME_INFO
JOIN PUBLISHER_DEVELOPER p ON p.pd_id = g_publisher
JOIN PUBLISHER_DEVELOPER d ON d.pd_id = g_developer

SQL 小提琴示例

对于您评论中的查询,类似的重写看起来像这样。

SELECT f.fk_nev, k.fk_nev, k_nev, j_cim, j_megjelent, j_megjelenes, 
  j_cover, a_becenev, b_head, b_ci?m, b_cimke, b_lead, b_tartalom, 
  b_komment, b_datum, b_burl
FROM jatek_info ji
JOIN fejleszt_kiad f ON f.fk_id = ji.j_fejleszt  
JOIN fejleszt_kiad k ON k.fk_id = ji.j_kiad
JOIN jatek j ON j.j_jatek_info = ji.j_id  
JOIN blog b ON b.b_jatek = j.j_id
JOIN admin a ON a.a_id = b.b_szerzo

我在某种程度上猜测您的表格是如何链接的,但我认为这应该是正确的。

请注意,?我假设其中一个字段名称是一个非 ASCII 字符,当您将查询剪切并粘贴到评论中时,该字符已损坏。如果您要剪切并粘贴我的代码,请务必解决此问题。

于 2013-05-29T17:26:03.137 回答
0

如果 g_publisher 和 g_developer 都引用 PUBLISHER_DEVELOPER.pd_id 那么你可以加入到表中两次。

  SELECT pd_1.pd_name, pd_2.pd_name, gi.g_label FROM PUBLISHER_DEVELOPER pd_1, PUBLISHER_DEVELOPER pd_2, GAME_INFO gi WHERE pd_1.pd_id = gi.g_publisher AND pd_1.pd_id = gi.g_developer;
于 2013-05-29T17:16:44.563 回答