我想用IN子句连接两个表,但是结果不正确。

表一只是一些“预订”,在一个字段中,我存储了它们应该链接到的日期的ID。所以我的行就像:

id_booking 1
days 1,2,3,4

id_booking 2
days 1,2


表2包含每个“ ID_DAY”的日期,如下所示:

id_day 1
date 2017-10-01

id_day 2
date 2017-10-02

id_day 3
date 2017-10-03

id_day 4
date 2017-10-04


预订:

CREATE TABLE bookings ( id_booking int(11) unsigned NOT NULL AUTO_INCREMENT, days varchar(50) DEFAULT NULL, PRIMARY KEY (id_booking) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;


天:

CREATE TABLE days ( id_day int(11) unsigned NOT NULL AUTO_INCREMENT, date varchar(10) DEFAULT NULL, PRIMARY KEY (id_day) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;


现在,我的想法是执行以下操作:

select * from bookings join days on days.id_day in (bookings.days);


这总是返回一行,而不是我期望的N行。我如何获得结果?

我的问题开始于必须找到一种方法来在一年中的所有日期都拥有一个表,然后将其加入到预订表中,以便每个预订都有“ N ROWS”个,因此我可以按日期进行过滤,计数他们或做手术,但我找不到实现这一目标的聪明方法。

你能给我一个提示吗?

最佳答案

首先,为什么要在列中存储逗号分隔的值。这违反了1NF规则。请尝试避免将,分隔的字段存储到列中。

您正在使用的查询返回2行-

id_booking  days    id_day      date
1           1,2,3,4 1           2017-10-01
2           1,2     1           2017-10-01

07-24 12:52