在我输入所有这些之前,我已经尝试并尝试从此处的其他线程并通过搜索谷歌找到解决方案。但我似乎无法得到答案。我认为自己对 SQL 非常擅长,但我似乎根本无法解决这个问题。
我目前有两张桌子:
我正在尝试获取 and 的数组ref_departments.id
,ref_departments.department_name
它将用作前端的下拉列表以填充company_department_norm
表格。最好在这一点上指出,我在创建下拉列表等方面没有技术问题——它是在 Yii 框架中构建的,并且实际的下拉列表本身已经到位。我的问题是识别正确的 SQL 语句以带回我想要填充下拉列表的数据(我将使用 Yii 的 Chtml 帮助器类)。
SELECT
我要创建的语句的第一个条件是,对ref_departments
表的查询将只选择在id
列中找不到 (PK) 列中的值的company_department_norm.department_id
行。这样做是为了使列表中只有有效的选项可用。我有这个查询工作,它看起来像这样......
SELECT RD.id, RD.department_name FROM ref_departments RD
LEFT OUTER JOIN company_department_norm CDN
ON (CDN.department_id = RD.id)
WHERE (CDN.department_id IS NULL)
额外的完整性/数据验证也将在后端(在 Yii 模型类中)完成。
下一步是我完全坚持的部分。在 Yii 模型中company_department_norm
,该company_id
字段表示公司的 FK(如上所示)。这将作为参数传递到查询中,以向查询添加附加条件,以便JOIN
语句仅匹配右表 ( company_department_name
)上的行,其中与从模型传递company_id
的行相同。company_id
出于测试目的,我只是尝试使用company_id
硬编码到 SQL 语句中的整数 1 来实现此功能。但是,对于我的生活,我似乎无法弄清楚如何做到这一点。
我试图用上面的查询修改: -
LEFT OUTER JOIN (SELECT * FROM company_department_norm WHERE
company_department_norm.company_id = 1) CDN
但是,这似乎根本没有过滤正确的表格。
谁能帮我这个?我可以想象,比我更有经验的 SQL 用户能够很快地识别出解决方案,但我已经花了几个小时试图解决这个问题!