2015-06-12 3 views
0

У меня есть базовый сервис лампы apache 2, работающий с mysql и php5.mysql, выбирая из разных таблиц (эквивалент FULL OUTER JOIN)?

У меня есть 2 таблицы, одна называется articles, который содержит столбцы id (первичный ключ, автоматическое приращение), title, posted, author_id, extract, body и другую таблицу, которая вызывается authors, который содержит столбцы id (первичный ключ, автоматический инкремент), name, img, bio.

Я хочу сделать предложение select, которое возвращает articles.title, articles.posted, articles.extract, articles.body, authors.name. Теперь нормально, я бы сделал FULL OUTER JOIN, но это не сработает, и после того, как я немного разобрался, я узнал, что вы не можете сделать это в mysql, google предлагает использовать UNION или комбинировать LEFT JOIN и RIGHT JOIN.

Я пробовал, но почему-то я не могу заставить его работать. Я не могу создать союз, потому что мои таблицы имеют разные числа столбцов (есть много статей от того же автора).

Я также попытался это:

SELECT articles.title authors.name FROM articles 
LEFT JOIN authors ON articles.author_id = authors.id 
UNION 
SELECT articles.title authors.name FROM articles 
RIGHT JOIN authors ON articles.author_id = authors.id; 

, но я получаю сообщение об ошибке: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.name FROM articles

Любое представление о том, как сделать эту работу было бы здорово.

Я также хотел бы отсортировать результаты по articles.posted, DESC, но я, вероятно, смогу это выяснить самостоятельно, как только я получу начальное утверждение.

ответ

2

Вы забыли некоторые ,:

SELECT articles.title, authors.name FROM articles 
        ^---here 
LEFT JOIN authors ON articles.author_id = authors.id 
UNION 
SELECT articles.title, authors.name FROM articles 
        ^---here 
RIGHT JOIN authors ON articles.author_id = authors.id; 

Ваша версия пытается SELECT articles.title AS authors.name и псевдонимы не может содержать .

+0

тьфу, время, чтобы сделать перерыв. Работает сейчас, спасибо за помощь –