MySQL JOIN, с ЕСЛИ условия

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

SELECT 
    * FROM
    users LEFT JOIN
    IF (users.type = '1', 'private','company') AS details ON
    users.id = details.user_id WHERE
    users.id = 1

Какие-либо идеи?

17
задан krzysiej 25 March 2016 в 13:14
поделиться

2 ответа

SELECT * FROM users 
LEFT JOIN private AS details ON users.id = details.user_id 
WHERE users.id = 1 AND users.type = 1

UNION

SELECT * FROM users 
LEFT JOIN company AS details ON users.id = details.user_id 
WHERE users.id = 1 AND users.type != 1

Я думаю, это то, что вы пытаетесь сделать, не так ли?

Поскольку вы сказали, что количество столбцов разное, вам нужно указать столбцы, например,

SELECT 'private' AS detailType, users.*, col1, col2, col3, '' FROM users 
LEFT JOIN private AS details ON users.id = details.user_id 
WHERE users.id = 1 AND users.type = 1

UNION

SELECT 'company', users.*, col1, '', '', col4  FROM users 
LEFT JOIN company AS details ON users.id = details.user_id 
WHERE users.id = 1 AND users.type != 1

В этом примере private имеет столбцы col1, col2 и col3, а company имеет col1 и col4, но вам нужны все.

24
ответ дан 30 November 2019 в 10:43
поделиться
SELECT
  users.*,
  details.info,
  CASE users.type WHEN '1' THEN 'private' ELSE 'company' END AS user_type
FROM
  users
  INNER JOIN (
    SELECT user_id, info FROM private
    UNION
    SELECT user_id, info FROM company
  ) AS details ON details.user_id = users.id

РЕДАКТИРОВАТЬ: Исходная версия ответа (вопрос неправильно понят):

SELECT
  *, 
  CASE type WHEN '1' THEN 'private' ELSE 'company' END AS details
FROM
  users
WHERE
  users.id = 1
6
ответ дан 30 November 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: