尝试进行选择,但似乎无法掌握这一特定选择的艺术。 这是我尝试过的:
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 和日期。日期是指一周的开始日期。因此,通过我的 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)
最佳答案
当列名存在于一个或多个选定表中时,会发生此错误。在本例中,它似乎是 user_id
,因为它同时存在于 users 和 timesheet_submission 中。
此外,虽然这完全是个人喜好,但许多人更喜欢使用 JOIN
语法,而不是在 FROM
子句中列出多个表。第二个选项创建笛卡尔积,这就是您正在经历的,除非您设置适当的条件来关联表,否则您可能会得到非常奇怪的结果,就像您现在所拥有的结果一样。
简而言之,连接语法可能如下所示:
SELECT [columns]
FROM table1 t1
JOIN table2 t2 ON t2.relatedColumn = t1.relatedColumn;
对于您的表格,您可以将用户加入到 timesheet_submission,并将 timesheet_submission 加入到 week,尽管这很棘手,因为没有直接链接。为了稍微分解一下我的答案,我首先使用如下连接获取 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 中使用表别名,否则您将再次收到歧义错误。就日期而言,如果我编写此查询,我只会包含以下条件:时间表日期介于给定日期和六天后之间[因为之间包含在内,如果您在 7 天后去,您将获得下一个日期以及]。试试这个:
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);
关于MySQL - 从一周开始日期选择一周的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29563768/