我对此已经疯了一段时间了,我敢肯定,目前正在做的事情比较简单,但是却找不到答案,可能是因为我无法将手指放在正确的问题上
我将通过一个简单的示例进行说明: 假设我有3张桌子
父亲:
| id | name |
儿子:
| id |father_id | name |
书籍:
| id | son_id | father_id |name |
我想要一个可以给我的查询:
[father] | [son] | [book]
--------- ---- -----
father1| son1 | book1
father1 |son1 | book5
father1,son2,book2
father1,none,book3
father1,none,book4
father2...
我有:
select fathers.name,sons.name,books.name
from fathers left join sons on son.father_id=fathers.id
left join books on ...
在这里感谢任何帮助!
更新:
似乎一本书分配给儿子,它也分配给父亲。
这是我当前的查询:
select fathers.name,sons.name,books.name
from
fathers
left join sons on son.father_id=fathers.id
left join books on (
(books.father_id=fathers.id and books.son_id is null)
or ((books.son_id=sons.id )
)
group by fathers.name,sons.name,books.name
但这在子列上并没有为我提供条件“无”。
答案 0 :(得分:1)
您的 son 表已经与 father 表有关系,因此 book 表中的 father_id 字段是多余的如果书是只给儿子而不是给父亲的,那是多余的!否则,如果父亲和儿子都可以有书,那么您就必须left join
book 表,同时包含父亲和 son 表;我的意思是您想要的查询如下所示:
select f.name, s.name, b.name
from Books b left join fathers f on b.father_id=f.id
left join sons s on b.son_id=s.id