如何条件 SQL WHERE
How to condition SQL WHERE
我想确定何时 GROUP_CONCAT 我的结果。我不知道如何区分 'category' 和 'condition' 结果。
SELECT d.company_name AS 'organisation name',
GROUP_CONCAT(DISTINCT tag.tag) AS 'category',
GROUP_CONCAT(DISTINCT tag.tag) AS 'conditions', d.contact_describtion AS 'description', d.tel, d.tel2, d.mobile, d.email, d.email2, d.web, d.web2, d.address, d.town, d.county, d.post_code AS 'post code', IF(d.state = 1, "published", "unpublished") AS 'status',d.contact_page_notes AS 'contact history', d.last_contacted_date AS 'last contacted', d.last_updated_date AS 'last updated'
FROM jds4a_directory d INNER JOIN
jds4a_tags_resources res
on d.id = res.resource_id INNER JOIN
jds4a_tags tag
on tag.id = res.tag_id
WHERE tag.category = 'condition' OR tag.category = 'category'
GROUP BY res.resource_id
我想实现的是在category下只显示category标签,conditions下只显示condition标签
使用case
。您还返回了太多列,我认为:
SELECT d.company_name AS organisation_name,
GROUP_CONCAT(DISTINCT (CASE WHEN tag.category = 'condition' THEN tag.tag END)) AS categories,
GROUP_CONCAT(DISTINCT (CASE WHEN tag.category = 'category' THEN tag.tag END)) AS conditions
FROM jds4a_directory d INNER JOIN
jds4a_tags_resources res
on d.id = res.resource_id INNER JOIN
jds4a_tags tag
on tag.id = res.tag_id
WHERE tag.category IN ('condition', 'category')
GROUP BY d.company_name;
备注:
SELECT
列应与GROUP BY
列一致。不要用无关的列超载。
GROUP BY
应匹配 SELECT
. 中未聚合的 keys/expressions
- 使用
IN
而不是一堆 OR
-- 更易于维护、编写并且不易出错。
- 对字符串和日期常量使用单引号。不要将它们用于列别名。
您可以尝试以下查询:
SELECT d.company_name AS 'organisation name',
GROUP_CONCAT(DISTINCT tag.tag) AS 'category',
GROUP_CONCAT(DISTINCT tag1.tag) AS 'conditions', d.contact_describtion AS 'description', d.tel, d.tel2, d.mobile, d.email, d.email2, d.web, d.web2, d.address, d.town, d.county, d.post_code AS 'post code', IF(d.state = 1, "published", "unpublished") AS 'status',d.contact_page_notes AS 'contact history', d.last_contacted_date AS 'last contacted', d.last_updated_date AS 'last updated'
FROM jds4a_directory d
INNER JOIN jds4a_tags_resources res
on d.id = res.resource_id
LEFT JOIN jds4a_tags tag
on tag.id = res.tag_id AND tag.category = 'category'
LEFT JOIN jds4a_tags tag1
on tag1.id = res.tag_id AND tag1.category = 'condition'
GROUP BY res.resource_id
没有尝试过这个查询。但它应该工作。基本上你需要加入 jds4a_tags table 一次条件标签名称
我想确定何时 GROUP_CONCAT 我的结果。我不知道如何区分 'category' 和 'condition' 结果。
SELECT d.company_name AS 'organisation name',
GROUP_CONCAT(DISTINCT tag.tag) AS 'category',
GROUP_CONCAT(DISTINCT tag.tag) AS 'conditions', d.contact_describtion AS 'description', d.tel, d.tel2, d.mobile, d.email, d.email2, d.web, d.web2, d.address, d.town, d.county, d.post_code AS 'post code', IF(d.state = 1, "published", "unpublished") AS 'status',d.contact_page_notes AS 'contact history', d.last_contacted_date AS 'last contacted', d.last_updated_date AS 'last updated'
FROM jds4a_directory d INNER JOIN
jds4a_tags_resources res
on d.id = res.resource_id INNER JOIN
jds4a_tags tag
on tag.id = res.tag_id
WHERE tag.category = 'condition' OR tag.category = 'category'
GROUP BY res.resource_id
我想实现的是在category下只显示category标签,conditions下只显示condition标签
使用case
。您还返回了太多列,我认为:
SELECT d.company_name AS organisation_name,
GROUP_CONCAT(DISTINCT (CASE WHEN tag.category = 'condition' THEN tag.tag END)) AS categories,
GROUP_CONCAT(DISTINCT (CASE WHEN tag.category = 'category' THEN tag.tag END)) AS conditions
FROM jds4a_directory d INNER JOIN
jds4a_tags_resources res
on d.id = res.resource_id INNER JOIN
jds4a_tags tag
on tag.id = res.tag_id
WHERE tag.category IN ('condition', 'category')
GROUP BY d.company_name;
备注:
SELECT
列应与GROUP BY
列一致。不要用无关的列超载。GROUP BY
应匹配SELECT
. 中未聚合的 keys/expressions
- 使用
IN
而不是一堆OR
-- 更易于维护、编写并且不易出错。 - 对字符串和日期常量使用单引号。不要将它们用于列别名。
您可以尝试以下查询:
SELECT d.company_name AS 'organisation name',
GROUP_CONCAT(DISTINCT tag.tag) AS 'category',
GROUP_CONCAT(DISTINCT tag1.tag) AS 'conditions', d.contact_describtion AS 'description', d.tel, d.tel2, d.mobile, d.email, d.email2, d.web, d.web2, d.address, d.town, d.county, d.post_code AS 'post code', IF(d.state = 1, "published", "unpublished") AS 'status',d.contact_page_notes AS 'contact history', d.last_contacted_date AS 'last contacted', d.last_updated_date AS 'last updated'
FROM jds4a_directory d
INNER JOIN jds4a_tags_resources res
on d.id = res.resource_id
LEFT JOIN jds4a_tags tag
on tag.id = res.tag_id AND tag.category = 'category'
LEFT JOIN jds4a_tags tag1
on tag1.id = res.tag_id AND tag1.category = 'condition'
GROUP BY res.resource_id
没有尝试过这个查询。但它应该工作。基本上你需要加入 jds4a_tags table 一次条件标签名称