如果您的CASE espression 值始终评估为 true,则无需使用该语句。
但是,我认为CASE在您的查询中的使用是错误的。它应该如下所示。您可以在 ON条件下使用CASE ,但不能在JOIN本身上使用 CASE。这样,您可以根据条件加入不同的列。
这在语法上是正确的,但不确定输出是什么。
您可以使用此链接验证此语句:Instant SQL Formatter
查询:
SELECT mFrom.user_name AS sender_name,
mp.message AS message
FROM msg_pv mp
INNER JOIN membresmvc
ON (
CASE mp.from_type
WHEN "mb" THEN mFrom.id = mp.id_from
ELSE NULL
END
)
WHERE mp.id_to = :id_member;
更新
如果您需要根据条件连接到多个表,那么您需要使用LEFT OUTER JOIN
. 假设您的第二个表是 *second_table* 并且另一个值是“另一个值”,您的查询可能看起来像这样
SELECT COALESCE(mFrom.user_name, second_table.some_col) AS sender_name,
mp.message AS message
FROM msg_pv mp
LEFT OUTER JOIN membresmvc
ON mFrom.id = mp.id_from
AND mp.from_type = "mb"
LEFT OUTER JOIN second_table
ON second_table.id = mp.id_from
AND mp.from_type = "another value"
WHERE mp.id_to = :id_member;
例子
这是一个说明它的例子。此脚本在 SQL Server 2012 数据库中进行了测试。在 MySQL 中可能会有所不同。但是,这里使用的 LEFT OUTER JOIN 的概念即使在 MySQL 中也是相同的。
- 有三个表,
table1
即table2
table3
- 在这里,我们必须根据以下条件将 table1 与 table2 和 table3 连接起来。
- 如果table1中的colrefid具有值t2 ,则将table1中的colrefid与table2中的col2连接起来。
constant
- 如果table1中的值为t3,则将table1中的colrefid与table3中的col3连接起来。
constant
- 你可以看到最后的输出
希望这能给您一个想法,根据您的要求加入表格。
脚本:
CREATE TABLE dbo.Table1
(
col1 INT NOT NULL
, colrefid INT NOT NULL
, constant VARCHAR(10) NOT NULL
);
CREATE TABLE dbo.Table2
(
col2 INT NOT NULL
, name VARCHAR(10) NOT NULL
);
CREATE TABLE dbo.Table3
(
col3 INT NOT NULL
, name VARCHAR(10) NOT NULL
);
INSERT INTO dbo.Table1 (col1, colrefid, constant) VALUES
(123, 2, 't2'),
(784, 3, 't3'),
(498, 2, 't2');
INSERT INTO dbo.Table2 (col2, name) VALUES
(2, 'table 2');
INSERT INTO dbo.Table3 (col3, name) VALUES
(3, 'table 3');
SELECT t1.col1
, t1.colrefid
, t1.constant
, COALESCE(t2.col2, t3.col3) colvalue
, COALESCE(t2.name, t3.name) colname
FROM dbo.Table1 t1
LEFT OUTER JOIN dbo.Table2 t2
ON t2.col2 = t1.colrefid
AND t1.constant = 't2'
LEFT OUTER JOIN dbo.Table3 t3
ON t3.col3 = t1.colrefid
AND t1.constant = 't3';
输出:
col1 colrefid constant colvalue colname
---- -------- -------- -------- -------
123 2 t2 2 table 2
784 3 t3 3 table 3
498 2 t2 2 table 2