首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多条件MySQL中选择多到多个关系

问在多条件MySQL中选择多到多个关系
EN

Stack Overflow用户
提问于 2014-05-07 21:15:30
回答 3查看 131关注 0票数 0

让我们想象一下,我们有一个小型MySQL数据库:

妇女:

  • id_woman
  • 名字
  • 姓氏

women_shoes:

  • id_woman (FK)
  • id_shoe (FK)

鞋:

  • id_shoe
  • 名字

woman_handbags:

  • id_woman (FK)
  • id_handbag (FK)

手袋:

  • id_handbag
  • 名字

有两种关系,多对多.我想从这样的数据库中得到的是:选择所有有鞋子的女人:耐克、美洲狮、芒果和手袋:范思哲。我对每一双鞋和每一只手提包都很感兴趣。我知道东西的名字,我想找出名字。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-07 21:22:28

也许是这样的?如果我正确理解你的问题。

代码语言:javascript
复制
SELECT 
    r.* 
FROM recipe r
JOIN recipe_ingredients ri ON ri.id_recipe = r.id_recipe
JOIN ingredients i ON i.id_ingredient = ri.id_ingredient
JOIN recipes_tags rt ON rt.id_recipe = r.id_recipe
JOIN tags t ON t.id_tag = rt.id_tag
WHERE i.name = 'ziemniaki' 
   OR i.name = 'cebula'
  AND t.tag = "tani" 
   OR t.tag = "łatwy"
GROUP BY r.id_recipe
HAVING COUNT(r.id_recipe) > 3 -- all 4 of the criteria have been met
;

请参阅工作小提琴以获得澄清。

基本上,这是在满足四个条件之一时返回一行的。除此之外,它还将只返回至少有一个成分和至少一个标签的食谱。因此,当返回4(或更多)行时,就满足了使用请求的params的菜谱的条件。

票数 1
EN

Stack Overflow用户

发布于 2014-05-07 21:58:26

由于第二个条件只有一个手提包,所以您实际上不需要从子查询中进行选择,但我认为它可能会更改为多个手提包。

代码语言:javascript
复制
SELECT
    w.*
FROM women w 
JOIN 
(
    SELECT
        id_woman
    FROM woman_shoes ws 
    JOIN shoes s ON ws.id_shoe = s.id_shoe
    WHERE s.name IN ('puma','nike','mango')
    GROUP BY id_woman
    HAVING COUNT(*) = 3
) has_shoes hs ON hs.id_woman = w.id_woman
JOIN 
(
    SELECT
        id_woman
    FROM woman_handbags wh 
    JOIN handbags h ON wh.id_handbag = h.id_handbag
    WHERE h.name IN ('versace')
    GROUP BY id_woman
    HAVING COUNT(*) = 1
) has_handbag hb ON hb.id_woman = w.id_woman
票数 1
EN

Stack Overflow用户

发布于 2022-11-19 23:56:15

试着做那样的事-但我有问题.

我想要做书目记录-我有一个表,我存储选定的文章(bibl_1983)的数据-我有表,我存储的主题(关键字)和名称(在文章中提到的人)-我试图把一个真正的书目转化为在线搜索的东西-所以我想保持原始数据系统-兼容原始打印的一个.

如果我只想显示一件事--例如关键字或人物--我很容易做到。

表格如下:

bibl_1983:pub_id,author,title,periodical,date,volume,issue,page,illustration,annotation

contable_name:contname_id,name_id2,pub_id4

命名空间:name_id,name

contable_subject:cont_id,sub_id2,pub_id3

主题:sub_id,subject

代码语言:javascript
复制
SELECT bibl_1983.pub_id, group_concat(subject.subject 
ORDER BY subject.subject ASC) AS subject
FROM bibl_1983, subject, contable_subject 
WHERE ((bibl_1983.pub_id=contable_subject.pub_id3) AND 
(subject.sub_id=contable_subject.sub_id2))
GROUP BY bibl_1983.pub_id

它工作得很好,而且很棒,这也很好:

代码语言:javascript
复制
SELECT bibl_1983.pub_id, group_concat(namespace.name 
ORDER BY namespace.name ASC) AS name
FROM bibl_1983, namespace, contable_name 
WHERE ((bibl_1983.pub_id=contable_name.pub_id4) AND
 (namespace.name_id=contable_name.name_id2))
GROUP BY bibl_1983.pub_id    

但是我不知道,我怎么能在同一时间,用同样的方式,在同一页上展示这两件事。

它是两种不同的多到多的联系。

我想展示的是:文章数据+关键字+一个查询(或视图)中的人员。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23528585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档