2012-02-02 70 views
2

这是我的计划:内嵌套的方式加入MySQL的

board(name, catId) 
cat(id, catName) 
userBoard(boardName, username) 
msg(boardName, username, title, text) 

假设用户名是“富”。我试图达到以下目标,但不知道如何去做。我感兴趣的自然连接的

userBoard.username = "foo" AND userBoard.boardName = board.name AND board.catId = cat.id AND msg.username = "foo" AND msg.boardName = board.name

什么应查询为MySQL?

UPDATE: 我忘了提,我很喜欢下面的返回值

`board.name, cat.catName, msg.title, msg.text` 

回答

1

试试这个:

Select b.name, c.catName, m.title, m.text 
from board b 
    inner join Cat c on b.catId = c.id 
    inner join userBoard ub on b.name = ub.boardName 
    inner join msg on m b.name = m.boardName 
where ub.username = "foo" and m.username = "foo" 

你需要选择的联接基于什么做的类型你想从你的表中选择。

+0

这是有问题的,它可以创建一个巨大的表。我希望按照我的逻辑条件访问桌子。即首先检索所有的用户板,然后将其与catId等组合。 – MrRoth 2012-02-02 09:48:42

+0

@MrRoth,这是您的逻辑条件编写的方式,它不会创建一个巨大的表,它会给你所有的数据符合你的逻辑条件,为什么它有问题就试试吧, – 2012-02-02 09:55:44

+0

它不应该创建一个条件中断的表。这里首先创建表格,然后检查条件。我想你已经忘记了第四行上的'on' – MrRoth 2012-02-02 10:01:57

0
select b.name, c.catName, m.title, m.text 
from board b 
    inner join cat c on b.catId = c.id 
    inner join userBoard ub on b.name = ub.boardName 
    inner join msg m on b.name = m.boardName 
where ub.username = "foo" and m.username = "foo"