[英]How get data from database with multiply tables?
大家好!
我从数据库正确获取结果有问题。 我有很多桌子,但是现在这并不重要。 我有一张桌子,像这样:
***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*
任何想法我做错了吗?
发行者和开发者可能不同。 第一个表与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
如果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;
假设您希望对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
对于您注释中的查询,类似的重写应如下所示。
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字符,当您将查询剪切并粘贴到注释中时,该字段已损坏。 如果要剪切并粘贴我的代码,请务必解决。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.