mysql выберите запрос справки - ORDER BY - PullRequest
2 голосов
/ 23 февраля 2010

Я пытаюсь создать запрос на выборку, в котором он будет принимать все столбцы 4 таблиц, а затем упорядочивать и отображать результаты по столбцу «имя» (одинаково во всех таблицах). Я все еще изучаю веревки MySQL.

Я обнаружил, что, поскольку столбцы имеют имя name, отображаются только результаты из последней таблицы. Есть ли способ выполнить этот запрос, который сохраняет все данные из всех таблиц?

Должен ли я использовать разные имена столбцов? Кажется, проще разделить одно имя, поскольку в каждом из них одна и та же информация.

SELECT * FROM table_one, table_two, table_three, table_four ORDER BY...

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

Спасибо!

Ответы [ 4 ]

3 голосов
/ 23 февраля 2010

Если между четырьмя таблицами нет взаимосвязи, используйте UNION s вместо:

SELECT a.name
  FROM TABLE_ONE a
UNION
SELECT b.name
  FROM TABLE_TWO b
UNION
SELECT c.name
  FROM TABLE_THREE c
UNION
SELECT d.name
  FROM TABLE_FOUR d
ORDER BY name

Здесь есть два варианта - UNION медленнее, потому что удаляет дубликаты - окончательный список будет уникальным списком имен. UNION ALL быстрее, потому что не удаляет дубликаты.

Чтобы получить столбцы из таблиц, используйте:

SELECT a.*,
       b.*,
       c.*,
       d.*
  FROM (SELECT a.name
          FROM TABLE_ONE a
        UNION
        SELECT b.name
          FROM TABLE_TWO b
        UNION
        SELECT c.name
          FROM TABLE_THREE c
        UNION
        SELECT d.name
          FROM TABLE_FOUR d) x
LEFT JOIN TABLE_ONE a ON a.name = x.name
LEFT JOIN TABLE_TWO b ON b.name = x.name
LEFT JOIN TABLE_THREE c ON c.name = x.name
LEFT JOIN TABLE_FOUR d ON d.name = x.name
0 голосов
/ 23 февраля 2010

Если они все имеют одинаковые name х ....

SELECT * 
    FROM table_one 
LEFT JOIN
    table_two USING(name)
LEFT JOIN
    table_three USING(name)
LEFT JOIN
    table_four USING(name)
ORDER BY name
0 голосов
/ 23 февраля 2010

johnny_n,

Вы должны использовать

 SELECT name as name1, name as name2, name as name3 etc...

Очевидно, что вам нужно использовать правильный синтаксис, но использование ключевого слова AS позволит вам использовать ключ, который вы хотите в своем запросе,

0 голосов
/ 23 февраля 2010

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

SELECT table_one.* t1, table_two.* t2, table_three.* t3, table_four.* t4 FROM table_one, table_two, table_three, table_four ORDER BY...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...