sqlite3如何有条件地更改联接表中的字段(使用CASE..END和JOIN一起使用)?

我有两个表“对象”和列表“ joined,作者:

$cmd="SELECT *  FROM object LEFT JOIN list ON (object.id=list.imgref AND list.persoon={$_SESSION['id']})"
    ." WHERE (owner=0 OR owner={$_SESSION['id']})  ";

这按我的预期工作。 示例:

table object
id cat owner
1  a   0
2  b   0
3  c   0
4  d   2
5  e   88
6  f   0

table list
lid imgref catlist persoon
1   2       AA      2
2   3       BB      2
3   4       CC      2
4   3       DD      33


result of LEFT JOIN
id cat owner | lid imgref catlist persoon
1   a  0
2   b  0       1     2     AA      2
3   c  0       2     3     BB      2
4   d  2       3     4     CC      2
6   f  0

现在在结果组合表中,我希望字段{object.cat“有条件地更改为sqlite3-speak中的” list.catlist“的值:

WHEN list.persoon={$_SESSION['id']} THEN object.cat=list.catlist END

例如(注意栏“ cat”):

id cat owner | lid imgref catlist persoon
1   a   0
2   AA  0       1     2     AA      2
3   BB  0       2     3     BB      2
4   CC  2       3     4     CC      2
6   f   0  

不幸的是,以下语句给出了错误:

$cmd="SELECT *  FROM object LEFT JOIN list ON (object.id=list.imgref AND list.persoon={$_SESSION['id']})"
    ." CASE WHEN list.persoon={$_SESSION['id']} THEN object.cat=list.catlist END"
    ." WHERE (owner=0 OR owner={$_SESSION['id']})  ";

希望能为您找到正确的公式提供帮助。

zcg234 回答:sqlite3如何有条件地更改联接表中的字段(使用CASE..END和JOIN一起使用)?

CASE表达式必须出现在SELECT列表中:

SELECT o.id,CASE WHEN l.persoon={$_SESSION['id']} THEN l.catlist ELSE o.cat END AS cat,o.owner,l.* 
FROM object o LEFT JOIN list l 
ON (o.id=l.imgref AND l.persoon={$_SESSION['id']})
WHERE (o.owner=0 OR o.owner={$_SESSION['id']})

请参见demo
结果(对于{$_SESSION['id']} = 2):

| id  | cat | owner | lid | imgref | catlist | persoon |
| --- | --- | ----- | --- | ------ | ------- | ------- |
| 1   | a   | 0     |     |        |         |         |
| 2   | AA  | 0     | 1   | 2      | AA      | 2       |
| 3   | BB  | 0     | 2   | 3      | BB      | 2       |
| 4   | CC  | 2     | 3   | 4      | CC      | 2       |
| 6   | f   | 0     |     |        |         |         |
本文链接:https://www.f2er.com/3110441.html

大家都在问