2011-01-28 5 views
1

У меня есть две таблицы:ВЫБРАТЬ два разных поля из одной колонки в одном запросе,

CREATE TABLE sections (id int, section_name varchar(16), section_title int, section_description int); 
INSERT INTO sections VALUES(1, 'index', 1, 2); 
INSERT INTO sections VALUES(2, 'contact', 3, 4); 

CREATE TABLE texts (id int, text_value varchar(64), text_language varchar(2), text_link int); 
INSERT INTO texts VALUES(1, 'Home', 'en', 1); 
INSERT INTO texts VALUES(2, 'Inicio', 'es', 1); 
INSERT INTO texts VALUES(3, 'Welcome', 'en', 2); 
INSERT INTO texts VALUES(4, 'Bienvenidos', 'es', 2); 
INSERT INTO texts VALUES(5, 'Contact', 'en', 3); 
INSERT INTO texts VALUES(6, 'Contacto', 'es', 3); 
INSERT INTO texts VALUES(7, 'Contact Us', 'en', 4); 
INSERT INTO texts VALUES(8, 'Contactenos', 'es', 4); 

Я новичок с запросами, и я не знаю, как делать дальше:

SELECT `sections`.`section_title` 
    , `sections`.`section_description` 
FROM `sections` 
    INNER JOIN `texts` 
    ON (`sections`.`section_title` = `texts`.`text_link`) AND (`sections`.`section_description` = `texts`.`text_link`) 
    WHERE `sections`.`section_name` = 'index' AND `texts`.`text_language` = 'en' 
; 

MySQL возвращается пустой результирующий набор :(

Я ожидаю получить, используя sectionssection_name = 'индекс' и textstext_language = 'ан':..

section_title = 'Home' 
section_description = 'Welcome' 

или с использованием sections. section_name = 'контакт' и texts. text_language = «ы»:

section_title = 'Contacto' 
section_description = 'Contactenos' 
+0

+1 Для полезной DDL –

+0

селектов являются раздел столбцов, но список значений ТЕКСТОВ, как ожидается выход - который является правильным? –

+0

Значения TEXTS как ожидаемый результат – quantme

ответ

1

Вам нужно join дважды ... как это:

SELECT 
    t1.text_value AS section_title, 
    t2.text_value AS section_description 
FROM `sections` 
    INNER JOIN `texts` AS t1 
    ON (`sections`.`section_title` = t1.`text_link`) 
    INNER JOIN `texts` AS t2 
    ON (`sections`.`section_description` = t2.`text_link`) 
WHERE `section_name` = 'index' 
    AND t1.`text_language` = 'en' 
    AND t2.`text_language` = 'en' 
+0

Я никогда не видел такой код (новичок), я пробовал его, но возвращал ошибку: # 1054 - Неизвестный столбец 't1.section_title' в 'списке полей' – quantme

+0

@quantme: Попробуйте сейчас –

+0

@ OMG Ponies: не работает: \ – quantme

1

я редактировал выше запрос немного, но есть к низкой репутации, чтобы сделать комментарий = P Попробуйте еще раз (работаю для меня):

SELECT t1.text_value AS section_title, 
     t2.text_value AS section_description 
    FROM `sections` AS s 
INNER JOIN `texts` as t1 ON (s.`section_title` = t1.`text_link`) 
INNER JOIN `texts` as t2 ON (s.`section_description` = t2.`text_link`) 
    WHERE s.`section_name` = 'index' 
     AND t1.`text_language` = 'en' 
     AND t2.`text_language` = 'en' 
+0

Используйте s вместо 'разделов' в JOIN – Pekkasso

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