我有以下查询:
$result = Table1::model()->findAll(array(
'with' => array(
'table2' => array(
'joinType' => 'LEFT JOIN',
'on' => 'pk = fk AND fk=1'
)
),
'select' => array('name',
'COALESCE(table2.price, t.standardprice) AS price',
'COALESCE(table2.period, t.period) AS period')
)
);
我的目标是选择 table2 的字段(如果已填写),但如果这些字段为空/未找到任何行,则应显示原始表的字段。
但是,我的输出不如预期。该price
字段根本不显示在我的结果属性中,并且该period
字段是 table2 的值或为空。
编辑:也许我的 SQL 在某处是错误的。使用这个 SQL 给了我想要的结果:
SELECT name, COALESCE(tb1.price, tb2.standardprice) as price, COALESCE(tb1.period, tb2.period) as period
FROM table1 as tb1
LEFT JOIN table2 as tb2
ON (tb1.pk= tb2.fk) AND fk=1;
但是我看不出与我当前的代码有什么不同。
EDIT2:表结构:
表1(原表)
pk (int 11) - Primary key, auto increment
name (varchar 255)
standardprice (decimal 11,2)
period (varchar 255)
fkLanguage //not relevant
photo //not relevant
description //not relevant
link //not relevant
表2
ID (int 11) - Primary key, auto increment
fk (int 11) - Foreign key, which links to pk of table1
period (varchar 255)
price (decimal 11,2)
fkType //not relevant
amount //not relevant
澄清:这fk=1
确实是一个 JOIN 条件。如果 fk 不是 1,那么我不希望这些行加入,而是从 table1 中获取值。