mySql Соедините две таблицы в неуникальных столбцах - PullRequest
2 голосов
/ 09 июня 2011

Привет, есть следующие таблицы:

Районы столов:

id   DD   text   
---|----|-----
1  | 01 | texas     
2  | 02 | ny     
5  | 03 | washington   

Советы столов:

id   DD   CC   text
---|----|----|-----
1  | 01 | 01 | text1 
2  | 02 | 01 | text2
5  | 02 | 02 | text3
3  | 02 | 03 | text4
4  | 03 | 01 | text5
5  | 03 | 02 | text6
6  | 01 | 02 | text7

Персона стола:

id   name    DD   CC
---|-------|----|----
1  | john  | 02 | 03 
2  | mike  | 03 | 02
3  | julia | 01 | 02

Я хочу сделать запрос, чтобы получить следующий результат:

результат:

 name     District    Council
-------|------------|-------
 john  | ny         | text4 
 mike  | washington | text6
 julia | texas      | text7

Пока у меня есть следующий запрос:

select p.name,d.text as district,c.text as council
    from  person p 
        inner join districts d on p.DD=d.DD
        inner join councils c on p.DD=c.DD and p.CC=c.CC
where 1;

Я думаючто логика должна быть правильной, но каким-то образом я получаю сообщение об ошибке ... Может кто-нибудь помочь понять это или указать мне правильное направление ??

Если я сделаю это, он вернет результаты, но, конечно, не ожидаемые:

select p.name,d.text as district,c.text as council
    from  person p 
        inner join districts d on p.DD=d.DD
        inner join councils c on p.CC=c.id
where 1;

Спасибо

РЕДАКТИРОВАТЬ: Это была проблема сопоставления ... Мой совет, если вы обнаружите, что это не использовать браузер запросов, потому что ошибки не очень многословны ... Тамможет быть вариант в этом, но я не знаю!

Спасибо всем

Ответы [ 2 ]

3 голосов
/ 09 июня 2011

Я понятия не имел о вашей схеме, но вот что я сделал (и она отлично работает!)

CREATE TABLE `districts` (
    `id` INT(10) unsigned NOT NULL,
    `DD` CHAR(20) NOT NULL,
    `text` CHAR(100) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `councils` (
    `id` INT(10) unsigned NOT NULL,
    `DD` CHAR(20) NOT NULL,
    `CC` CHAR(20) NOT NULL,
    `text` CHAR(100) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `person` (
    `id` INT(10) unsigned NOT NULL,
    `DD` CHAR(20) NOT NULL,
    `CC` CHAR(20) NOT NULL,
    `name` CHAR(100) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO districts (`id`, `DD`, `text`) VALUES ('1','01','texas');   
INSERT INTO districts (`id`, `DD`, `text`) VALUES ('2','02','ny');   
INSERT INTO districts (`id`, `DD`, `text`) VALUES ('5','03','washington');

INSERT INTO councils (`id`, `DD`, `CC`, `text`) VALUES ('1','01','01','text1');
INSERT INTO councils (`id`, `DD`, `CC`, `text`) VALUES ('2','02','01','text2');
INSERT INTO councils (`id`, `DD`, `CC`, `text`) VALUES ('3','02','03','text4');
INSERT INTO councils (`id`, `DD`, `CC`, `text`) VALUES ('4','03','01','text5');
INSERT INTO councils (`id`, `DD`, `CC`, `text`) VALUES ('5','03','02','text6');
INSERT INTO councils (`id`, `DD`, `CC`, `text`) VALUES ('6','01','02','text7');

INSERT INTO person (`id`, `name`, `DD`, `CC`) VALUES ('1','john','02','03');
INSERT INTO person (`id`, `name`, `DD`, `CC`) VALUES ('2','mike','03','02');
INSERT INTO person (`id`, `name`, `DD`, `CC`) VALUES ('3','julia','01','02');

SELECT p.name, d.text AS district, c.text AS council
FROM person p
INNER JOIN districts d ON p.DD = d.DD
INNER JOIN councils c ON p.DD = c.DD
AND p.CC = c.CC
WHERE 1
0 голосов
/ 09 июня 2011

Ваш первый запрос ДОЛЖЕН сработать ... только удалите WHERE 1 ... вам не нужно предложение where вообще, если вы возвращаете все записи из таблицы person.Псевдоним таблицы используется правильно, и первый запрос правильно присоединяется к советам в округе и в совете, в противном случае ваш второй пример запроса будет возвращать несколько строк для человека, поскольку существуют только повторяющиеся коды "совета".

«WHERE 1» терпит неудачу ... поскольку 1 не является логическим выражением ... Если используется, вам придется выполнить "WHERE 1 = 1"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...