0

SQL Noob 在这里。我的桌子是这样的:

主表

+-----------+-------------+
| talent_id | talent_name |
+-----------+-------------+
|         1 | Talent1     |
|         2 | Talent2     |
|         3 | Talent3     |
+-----------+-------------+

教育表

+-----------+-----------+-----------------------------+
| talent_id |   level   |           course            |
+-----------+-----------+-----------------------------+
|         1 | Post-Grad | Master in Something         |
|         1 | Post-Grad | Doctor in Something         |
|         1 | College   | BS Something Engineering    |
|         2 | College   | BS Something Science        |
|         2 | Post-Grad | Master in Something Science |
|         3 | College   | BS Computer Something       |
+-----------+-----------+-----------------------------+

是否可以在一个查询中组合两个表中的列?我尝试了单独的查询(顺便说一句,这很有效),但我很难将这两个查询组合到一个数组中。如果以防万一有单独的查询是更好的解决方案,你们能给我一个想法如何遍历两个数组结果并将其组合成这样的东西:

Array( [0] => Array(
             'talent_id' => '1', 
             'talent_name' => 'Talent1', 
             'course' => Array('Master in something', 'Doctor in something', 'BS Something')),
       [1] => Array('talent_id' => '2', ...) )

自从我开始实习以来,Stack Overflow 就给了我很大的帮助。我要感谢你们所有人。

4

5 回答 5

3

您应该在查询中使用左连接:

SELECT m.talent_id,m.talent_name,e.level,e.course
FROM main AS m 
LEFT JOIN education AS e ON m.talent_id =  e.talent_id
于 2013-05-24T09:45:00.257 回答
0

首先,您选择您的才能(由他们的 id 索引)和您的教育。在这里,我认为您刚刚做了 2 个查询。然后

foreach ($educations as $education) {
  $talents[$talent_id]['course'][] = $education;
}

你也可以从 a 开始LEFT JOIN,但是当你有多个级别时,这种水合作用会很快变得混乱,我不推荐它。

于 2013-05-24T09:43:32.923 回答
0

有很多选择

我经常使用:

SELECT talent.talent_id, talent.talent_name, education.course FROM talent, education WHERE education.talent_id = education.course

如果教育对人才来说是空的,那么人才不会囤积。然后你需要使用一个连接

于 2013-05-24T09:43:52.740 回答
0

您通常会使用连接,

select * from main left join education using (talentid)
于 2013-05-24T09:46:19.997 回答
0

您可以使用 FULL OUTER JOIN 来实现这一点。FULL OUTER JOIN 结合了左外连接和右外连接的结果,并从表两侧的表中返回所有(匹配或不匹配的)行。

SELECT [COL-1], [COL-2] [, ... COL-N]
FROM [TABLE-1]
FULL OUTER JOIN [TABLE-2] ON [TABLE-1].[COLUMN NAME 1] = [TABLE 2].[COLUMN NAME 2]
于 2013-05-24T09:48:16.617 回答