gpt4 book ai didi

mysql - 如何加入这些表以获得正确的结果

转载 作者:行者123 更新时间:2023-11-30 23:33:24 24 4
gpt4 key购买 nike

几个小时以来,我一直试图找出这个查询,但没有成功。

我有 3 个表: - jstyle_category - 风格 - subsite_style_alias

表有这个模式:

  • jstyle_category:
    • style_id
    • 类别编号
    • subsite_id (INT)
    • 排序顺序
    • 活跃(枚举:y,n)
  • 风格
    • 编号
    • subsite_id(STRING,逗号分隔)
    • 活跃(枚举:y,n)
    • currently_available_for_sale (ENUM: y,n)
    • style_type_id
    • 事件日期(DATETIME)
  • subsite_style_alias
    • style_id
    • 位置
    • 展示
    • subsite_logo_group_id
    • subsite_id (INT)

记录是这样的

  • jstyle_类别
    • 1234, 27, 572, 0, y
    • 8800, 27, 572, 1, 是
    • 8800, 23, 953, 0, 是
    • 8500, 23, 572, 0, y
  • 风格
    • 1234, 572, y, y, 99, 0000-00-00
    • 8800, 123, y, y, 99, 0000-00-00
    • 8500, 572, y, y, 99, 0000-00-00
  • subsite_style_alias
    • 8800, 0, y, 2589, 572
    • 8800, 1, y, 3475, 572
    • 8800, 1, y, 9554, 368

我需要一个子集,它包含 jstyle_category 中的所有项目,其中 category_id = 27 以及来自 subsite_style_alias 的数据(如果存在)(这部分我已经通过以下查询完成)。我真正的问题是目前我得到的是:

  • 27、0、1234、空、空
  • 27、0、8800、0、2589
  • 27、1、8800、1、3475

我需要的是没有对应subsite_style_alias的8800,所以最终结果会是

  • 27、0、1234、空、空
  • 27、1、8800、空、空
  • 27、0、8800、0、2589
  • 27、1、8800、1、3475

我知道我已经接近答案了,只是我想不通。

如果可能的话,我也尽量避免联合,而是使用相同表的连接

SELECT  jstyle_category.category_id category_id,
jstyle_category.sort_order category_pos,
style.id style_id,
subsite_style_alias.pos pos,
subsite_style_alias.subsite_logo_group_id
FROM `jstyle_category`
LEFT JOIN style ON style.id = jstyle_category.style_id
LEFT JOIN subsite_style_alias ON style.id = subsite_style_alias.style_id AND subsite_style_alias.subsite_id = 572
WHERE
(

(
style.subsite_id = "" OR
FIND_IN_SET("0",style.subsite_id) OR
FIND_IN_SET("572",style.subsite_id)
) AND

(
subsite_style_alias.`active` = "y" OR
subsite_style_alias.`active` IS NULL
) AND
style.active = "y" AND
style.currently_available_for_sale = "y" AND
style.style_type_id NOT IN (7,10,11) AND
jstyle_category.category_id = 27 AND
jstyle_category.subsite_id IN (0,572) AND
jstyle_category.active = "y" AND

(
style.date_active IS NULL OR
style.date_active <= "2012-02-24 18:00:00"
)
)
GROUP BY subsite_style_alias.subsite_logo_group_id,
style.id
ORDER BY category_pos, subsite_style_alias.pos IS NULL,
subsite_style_alias.pos,
style.id

谢谢

最佳答案

LEFT JOIN 更改为 LEFT OUTER JOIN

参见 this reference on outer joins in MySQL .

关于mysql - 如何加入这些表以获得正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9439564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com