2015-04-15 4 views
2

Я пытаюсь присоединиться к двум таблицам с четким URL-адресом фотографии, но я не могу этого сделать. Я не знаю, возможно ли это или нет.Соедините 2 таблицы, возвращайте одну строку для каждой связанной информации

Мои таблицы похожи на приведенные ниже примеры, и я хочу присоединиться к ним.

+-------------------+  +----------------------------+ 
|  table1  |  |   table2   | 
+----+------+-------+  +----+-----------+-----------+ 
| id | name | place |  | id | photo_url | table1_id | 
+----+------+-------+  +----+-----------+-----------+ 
| 1 | abc | xyz |  | 1 | link1  |   1 | 
| 2 | def | jiu |  | 2 | link2  |   1 | 
| 3 | efw | jlo |  | 3 | link3  |   3 | 
+----+------+-------+  | 4 | link4  |   2 | 
          +----+-----------+-----------+ 
+-------------------------------+ 
|   joined_tbl   | 
+----+------+-------+-----------+ 
| id | name | place | photo_url | 
+----+------+-------+-----------+ 
| 1 | abc | xyz | link1  | 
| 2 | def | jiu | link3  | 
| 3 | efw | jlo | link4  | 
+----+------+-------+-----------+ 

Я новичок в MySQL и до сих пор его изучение. Я застрял здесь, и я ценю любые решения.

+0

В каких таблицах вы пытаетесь присоединиться? Первые два? –

+2

Почему link1, а не link2 для table1id как 1? – SMA

ответ

1

Вы можете использовать JOIN:

SELECT t1.*, 
    t2.photo_url 
FROM table1 t1 
JOIN table2 t2 
    ON (t1.id = t2.table1_id) 
JOIN (
    SELECT min(id) AS id, 
    table1_id 
    FROM table2 
    GROUP BY table1_id 
) t3 ON (t2.id = t3.id 
    AND t2.table1_id = t3.table1_id) 

Само JOIN для table2 это выбрать только фото в table1_id.


➜ SQLFiddle Demo

+1

Большое вам спасибо –

0

ли вы попробовать что-то вроде:

SELECT table1.id, 
    table1.name, 
    table1.place, 
    table2.photo_url 
FROM table1 
LEFT JOIN table2 
    ON table1.id = table2.table1_id; 

Я в основном выбранного желаемого поля из таблиц в основе id критериев.

Вы можете проверить MySQL учебник здесь: http://www.w3schools.com/sql/default.asp

0

зависит, как вы определяете, какое значение из photo_url вы хотите.

Предполагая, что только MIN один: -

SELECT table1.id, 
    table1.name, 
    table1.place, 
    MIN(table2.photourl) 
FROM table1 
LEFT OUTER JOIN table2 
    ON table1.id = table2.table1_id 
GROUP BY table1.id, 
    table1.name, 
    table1.place 

Если вы не заботитесь, которая одна (хотя это работает в MySQL, это хитроумный SQL): -

SELECT table1.id, 
    table1.name, 
    table1.place, 
    table2.photo_url 
FROM table1 
LEFT OUTER JOIN table2 
    ON table1.id = table2.table1_id 
GROUP BY table1.id, 
    table1.name, 
    table1.place 

Если вы хотите что-то немного сложнее, тогда вам, вероятно, понадобится использовать дополнительный запрос, чтобы получить выбранный photo_url для каждого table1_id, а затем JOIN этот подзапрос к table1.

Смежные вопросы