简体   繁体   English

如何从带有乘法表的数据库中获取数据?

[英]How get data from database with multiply tables?

Hello Guys! 大家好!

I have a problem with get result from database correctly. 我从数据库正确获取结果有问题。 I have lot of table but this is not important right now. 我有很多桌子,但是现在这并不重要。 I have a table look like that: 我有一张桌子,像这样:

***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]

The connections beetwen the tables are this: 这些表之间的连接是这样的:

PUBLISHER_DEVELOPER : GAME_INFO = 1:LOT PUBLISHER_DEVELOPER:GAME_INFO = 1:LOT

I would like to get the game info with the publisher and developers normal name, but i always got ZERO row returned. 我想使用发行商和开发商的正常名称获取游戏信息,但是我总是返回零行。

My SQL query: 我的SQL查询:

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

Any idea what i do wrong? 任何想法我做错了吗?

Probably the publisher and developer are different. 发行者和开发者可能不同。 There should be a relationship between the first table and either the g_publisher or 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

Or 要么

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;

Assumedly you want two joins to the PUBLISHER_DEVELOPER table to get back both the publisher and the 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

SQL Fiddle example SQL Fiddle示例

For the query in your comment, a similar rewrite would look something like this. 对于您注释中的查询,类似的重写应如下所示。

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

I'm guessing to a certain extent how your tables are linked, but I think that should be correct. 我在某种程度上猜测您的表如何链接,但是我认为应该是正确的。

Note that there is a ? 请注意,有一个? in one of the field names which I'm assuming is a non-ASCII character that got corrupted when you cut and paste the query into the comment. 我假设其中一个字段名称是一个非ASCII字符,当您将查询剪切并粘贴到注释中时,该字段已损坏。 Be sure to fix that if you're cutting and pasting my code back. 如果要剪切并粘贴我的代码,请务必解决。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM