根据一些查询结果向表中添加列

时间:2014-01-26 02:29:56

标签: mysql

我有这两个表,比如faq_categoriesfaq_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 |
---------------------------

2 个答案:

答案 0 :(得分:1)

假设faq_category_relations中没有重复项,那么您可以使用left outr joincase表达式执行此操作:

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来完成。