MySQL ПРИСОЕДИНЯЙТЕСЬ с условиями ЕСЛИ - PullRequest
17 голосов
/ 05 мая 2010

Я хочу получить результаты с помощью запроса:

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

Есть идеи?

Ответы [ 4 ]

24 голосов
/ 05 мая 2010
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, в то время как у компании есть col1 и col4, но вы хотите их все.

17 голосов
/ 28 апреля 2012

Я уверен, что это уже решено, но для людей с подобной проблемой.

Вы также можете попробовать несколько левых соединений, чтобы получить все данные

SELECT *, IF (users.type = 1, p.name, c.name) AS name FROM users
LEFT JOIN private AS p ON (users.type = 1 AND users.id = p.user_id) 
LEFT JOIN company AS c ON (users.type != 1 AND users.id = c.user_id)
6 голосов
/ 05 мая 2010
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
0 голосов
/ 07 декабря 2018

Здесь я делюсь условием if else в SQL-запросе Magento2, чтобы получить сведения о заказе отчета, когда клиенты входят в систему, а не входят в обе системы. Вы только что улучшили свой запрос в соответствии с ситуацией.

SELECT so.increment_id as ID,sog.customer_id as Customer_Id, sog.customer_name as Customer_Name, sog.customer_email as Customer_Email,CASE sog.customer_group WHEN '1' THEN 'Custome Login' ELSE 'Not Login' END as Customer_Group, sog.grand_total as Grand_Total,sog.subtotal as Subtotal, sog.billing_name as Billing_Name,sog.billing_address as Billing_Address,sog.shipping_address as shipping_address,so.shipping_description as Shipping_Information, so.status as Status,so.cancel_order_username as Canceled_BY,so.cancel_order_currenttime as Cancellation_Time, so.cancel_order_comment as Cancellation_Reason from sales_order so LEFT JOIN sales_order_grid as sog ON sog.increment_id=so.increment_id where so.cancel_order_currenttime >= Date('2018-10-01') AND so.cancel_order_currenttime <= Date('2018-12-05')

Here we have created some alias according to the situation:-
so->sales_order table,
sog->sales_order_grid,

and we are using the if/else condition in the customer group because we know that, "0" is used for the Guest user,
"1" is used for the login user and both are used for the customer group:-

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

...