尝试做一个选择,但似乎无法掌握这个特定的艺术。 这就是我的尝试:
select user_id,date,monday_am_task from users,week,timesheet_submission where user_id='1' and date='2015-04-06';
然而它说这太模糊了。这基本上就是我想要做的。如果user_id = 1且日期在2015-04-06之间,则显示数据。在我和我之间的日期之间,我设置了一个星期表,其中包括week_number,week_id和date。日期称为开始日期。因此,对于我的select语句,我试图选择将拉出该周所有数据的日期,如果这有意义的话?
周表:
mysql> select * from week;
+---------+------+------------+
| week_id | week | date |
+---------+------+------------+
| 1 | 1 | 2014-12-29 |
| 2 | 2 | 2015-01-05 |
| 3 | 3 | 2015-01-12 |
| 4 | 4 | 2015-01-19 |
| 5 | 5 | 2015-01-26 |
| 6 | 6 | 2015-02-02 |
| 7 | 7 | 2015-02-09 | etc...
用户:
mysql> select user_id, username, level from users;
+---------+----------+-------+
| user_id | username | level |
+---------+----------+-------+
| 1 | tom | 1 |
| 2 | owain | 2 |
+---------+----------+-------+
2 rows in set (0.00 sec)
mysql> select user_id, date, timesheet_id, monday_am_task from timesheet_submission;
+---------+---------------------+--------------+----------------+
| user_id | date | timesheet_id | monday_am_task |
+---------+---------------------+--------------+----------------+
| 1 | 2015-04-10 12:44:54 | 34 | 5 |
+---------+---------------------+--------------+----------------+
1 row in set (0.00 sec)
答案 0 :(得分:0)
当一个或多个所选表中存在列名时,会发生此错误。在这种情况下,它似乎是user_id
,因为它同时位于用户和timesheet_submission中。
此外,尽管这是个人偏好,但许多人更喜欢使用JOIN
语法,而不是在FROM
子句中列出多个表。第二个选项创建了一个笛卡尔积,这是您正在经历的,除非您设置相关表的适当条件,否则您可能得到非常奇怪的结果,就像您现在拥有的那样。
简而言之,连接语法可能如下所示:
SELECT [columns]
FROM table1 t1
JOIN table2 t2 ON t2.relatedColumn = t1.relatedColumn;
对于你的表,你可以将用户加入到timesheet_submission,将timesheet_submission加入到一周,虽然那个是棘手的,因为没有直接的链接。为了稍微打破我的答案,我首先要通过这样的连接获取user_id 1的所有时间表提交:
SELECT u.user_id, ts.date, ts.monday_am_task
FROM users u
JOIN timesheet_submission ts ON ts.user_id = u.user_id AND u.user_id = 1;
不要忘记在select中使用表别名,否则会再次出现歧义错误。至于日期,如果我写这个查询,我只会包括条件,时间表日期在你的给定日期和六天之后[因为之间是包容性的,如果你去七天后你会得到下一个日期以及]。试试这个:
SELECT u.user_id, ts.date, ts.monday_am_task
FROM users u
JOIN timesheet_submission ts ON ts.user_id = u.user_id AND u.user_id = 1
WHERE ts.date BETWEEN '2015-04-06' AND DATE_ADD('2015-04-06', INTERVAL 6 DAY);