Справка по SQLite Join - PullRequest
       4

Справка по SQLite Join

0 голосов
/ 12 августа 2011

Рассмотрим эту структуру таблицы

people{id,firstName,lastName,preferredName}
list{id,person1_id,person2_id}

Я хочу получить все данные из списка, но с именами людей вместо идентификаторов и с завихрением: если установлено preferredName, используйте это, в противном случае используйте firstName+SPACE+lastName.

Запрос, если мне нужно только одно имя, будет таким:

SELECT list.id,
CASE WHEN people.preferredName IS NULL OR people.preferredName="" THEN people.firstName||' '||people.lastName ELSE people.preferredName END AS preferredName 
FROM list LEFT JOIN people ON list.person1_id=people.id;

Спасибо.

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

COALESCE () возвращает свой первый ненулевой аргумент.

COALESCE(preferredName, firstName || ' ' || lastName) as person_name

Не думаю, что вам нужны левые соединения, но я могу ошибаться. (Если у вас есть ограничение внешнего ключа, так что person1_id и person2_id должны существовать в людях, вам не нужно левое соединение.)

SELECT list.id,
COALESCE( p1.preferredName, p1.firstName || ' ' || p1.lastName) as person1_name,
COALESCE( p2.preferredName, p2.firstName || ' ' || p2.lastName) as person2_name,
FROM list 
INNER JOIN people p1 ON list.person1_id= p1.id
INNER JOIN people p2 on list.person2_id = p2.id
1 голос
/ 12 августа 2011

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

SELECT list.id,
       CASE WHEN people1.preferredName IS NULL OR people1.preferredName = ""
         THEN people1.firstName || ' ' || people1.lastName
         ELSE people1.preferredName
       END AS preferredName1,
       CASE WHEN people2.preferredName IS NULL OR people2.preferredName = ""
         THEN people2.firstName || ' ' || people2.lastName
         ELSE people2.preferredName
       END AS preferredName2,
  FROM list
  LEFT JOIN people people1 ON list.person1_id = people1.id
  LEFT JOIN people people2 ON list.person2_id = people2.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...