我有这两个表,比如faq_categories
和faq_category_relations
。首先,我在表格faq_category_relations
中进行查询,例如
SELECT category_id
FROM faq_category_relations
WHERE faq_id = 2;
而result_a
是
--------------
|category_id |
--------------
| 2 |
--------------
| 3 |
--------------
然后我想查询表faq_categories
并添加一列checked
,其值根据result_a
设置(即,如果faq_categories.id
是其中之一result_a中的值,将checked
设置为true
,将false
)设置为查询结果。
直到现在我才提出:
SELECT *, IF((faq_categories.id is one of result_a), 'true', 'false') AS checked
FROM faq_categories
并且不知道如何继续..
我知道在检索查询数据后我可以用PHP做这个技巧,但必须有一些简单的方法来直接返回我需要的查询结果。
EIDT:
结果应该是这样的:
---------------------------
|category_id | checked |
---------------------------
| 1 | false |
---------------------------
| 2 | true |
---------------------------
| 3 | true |
---------------------------
| 4 | false |
---------------------------
| 5 | false |
---------------------------
答案 0 :(得分:1)
假设faq_category_relations
中没有重复项,那么您可以使用left outr join
和case
表达式执行此操作:
SELECT c.*,
(case when cr.category_id is not null then 'true' else 'false' end) as checked
FROM faq_categories c left outer join
faq_category_relations cr
on c.category_id = cr.category_id and
cr.faq_id = 2;
我还假设您只需要查询中的值而不是表中的新列。
答案 1 :(得分:0)
最简单的方法是:
select c.*, cr.category_id is not null checked
from faq_categories c
left join faq_category_relations cr
on c.category_id = cr.category_id
where cr.faq_id = 2
这是有效的,因为对于左连接,如果没有连接,则连接列中的值将为null,因此测试not null将告诉您该类别是否列在另一个表中。
如果您愿意,可以将faq_id
上的条件移至加入条件,这可以通过在上述查询中将where
更改为and
来完成。