2014-10-10 71 views
0

我很不安很抱歉,但我需要你的专业人士帮助不大...的MySQL从依赖于其它表的表中选择值

我有两个表:

Table1: 
ID, date, menu1, menu2, menu3, menu4 

Table2: 
ID, name, somethingElse, somethingElse2 

Table1(menu1,menu2,menu3,menu4)是Table2的ID。我需要的是向数据库查询“日期”值,并从Table2中获取四行(取决于Table1的menuX值)有什么建议吗?

回答

1

阅读MySQL文档并查看有关JOINing的MySQL教程。在那里,你会发现这样的事情:

做一个简单的SELECT五香了一个JOIN并告诉MySQL使用ID作为加入-科拉姆:

SELECT Table1.`date` FROM Table1 
JOIN Table2 ON Table1.ID = Table2.ID 
WHERE Table1.menu1 = "someValue" 
AND Table1.menu2 = "someOtherValue" 

如果运行了一下尝试添加上INDEX慢表ID-COL之一:

ALTER TABLE Table1 ADD INDEX myIndex (ID) 

您可以检查多少行通过声明

0123进行检查
+0

Table1.ID = Table2.ID没有连接! Table1.menu1 = Table2.ID,Table1.menu2 = Table2.ID,Table1.menu3 = Table2.ID,Table1.menu4 = Table2.ID,这是我所需要的,通过查询Table1中的日期从Table2中获取四行 – SilentCry 2014-10-10 16:36:14

+0

那又如何?只需在上面查询的'ON'部分使用这些条件即可。通过'AND'连接它们... – Benvorth 2014-10-10 16:38:54

+0

但是在你的例子中没有添加“WHERE'date' = '14 -10-10'的地方”“我需要类似SELECT * FROM Table2 WHERE Table2.ID = – SilentCry 2014-10-10 19:03:49

0

好吧,现在我明白你的问题了。感谢您提供的示例,这是一个可以解决您的问题的查询。这里的技巧是使用UNION将一个查询结果追加到另一个查询结果下。这样做四次将这样的伎俩:

SELECT b.* FROM dailymenu as a JOIN menu as b ON a.menu1 = b.ID WHERE a.`date` = '2014-10-08' 
UNION 
SELECT b.* FROM dailymenu as a JOIN menu as b ON a.menu2 = b.ID WHERE a.`date` = '2014-10-08' 
UNION 
SELECT b.* FROM dailymenu as a JOIN menu as b ON a.menu3 = b.ID WHERE a.`date` = '2014-10-08' 
UNION 
SELECT b.* FROM dailymenu as a JOIN menu as b ON a.menu4 = b.ID WHERE a.`date` = '2014-10-08' 

你的菜单听起来很美味:-)

+0

也许听起来,但它不是:-D它是从工厂的厨房菜单,这个项目是这里只是为了向总部报告,情况有多糟糕: - D - >就业评级食品:-) – SilentCry 2014-10-11 10:17:43

+0

rofl - 祝你好运! – Benvorth 2014-10-11 10:20:20

相关问题