次のようなクエリで結果を取得したい:
SELECT
* FROM
users LEFT JOIN
IF (users.type = '1', 'private','company') AS details ON
users.id = details.user_id WHERE
users.id = 1
何か案は?
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がありますが、すべて必要です。
これはすでに解決されていると思いますが、同様の問題を抱えている人にとっては。
複数の左結合を試行してすべてのデータを取得することもできます
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)
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
ここでは、Magento2 SQLクエリのif else条件を共有して、顧客がログインしていて両方がログインしていないレポート注文詳細を取得しています。状況に応じてクエリを拡張しました。
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')
ここでは、状況に応じてエイリアスを作成しました:so->sales_order table, sog->sales_order_grid,
顧客グループにはif/else条件を使用しています。これは、ゲストユーザーには"0"
が使用され、ログインユーザーには"1"
が使用され、両方が顧客グループに使用されるためです。
この提案があなたの混乱を助けてくれることを願っています。この答えを理解する上で何か問題に直面した場合はお知らせください。