Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql在我的优化查询中留下了外部连接_Mysql_Sql - Fatal编程技术网

Mysql在我的优化查询中留下了外部连接

Mysql在我的优化查询中留下了外部连接,mysql,sql,Mysql,Sql,我有两个数据库表名,分别为tablestr table和restbookingtable: 表TR: str_id是主键 再预订: bookingsection_id是外键 在预订表中,我使用逗号分隔存储str_id多个值,我的查询是 SELECT `str_id` FROM (`rest_tablestr`) WHERE str_id NOT IN ( SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.bookingsection_id, ",", n.n),

我有两个数据库表名,分别为tablestr table和restbookingtable:

表TR:

str_id是主键

再预订: bookingsection_id是外键

在预订表中,我使用逗号分隔存储str_id多个值,我的查询是

SELECT `str_id` FROM (`rest_tablestr`) WHERE str_id NOT IN (
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.bookingsection_id, ",", n.n), ",", -1) value FROM rest_restaurantbooking t 
CROSS JOIN (
SELECT a.N + b.N * 10 + 1 n FROM (
SELECT 0 AS N
UNION ALL
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
UNION ALL
SELECT 4
UNION ALL
SELECT 5 
UNION ALL 
SELECT 6 
UNION ALL
SELECT 7 
UNION ALL 
SELECT 8 
UNION ALL 
SELECT 9) a , (
SELECT 0 AS N
UNION ALL 
SELECT 1 
UNION ALL 
SELECT 2 
UNION ALL 
SELECT 3 
UNION ALL 
SELECT 4 
UNION ALL 
SELECT 5 
UNION ALL 
SELECT 6 
UNION ALL 
SELECT 7 
UNION ALL 
SELECT 8 
UNION ALL SELECT 9) 
b ORDER BY n ) n 
WHERE n.n <= 1 + (LENGTH(t.bookingsection_id) -
LENGTH(REPLACE(t.bookingsection_id, ",", ""))) AND
t.res_id = 21 AND
t.booking_status not in ("cancelled","departed","noshow") AND
((t.bookingstart_time <= "2015-06-12 19:45:00" AND t.bookingend_time >= "2015-06-12 22:15:00") OR 
(t.bookingend_time >= "2015-06-12 19:45:00" AND t.bookingend_time <= "2015-06-12 22:15:00") OR
(t.bookingstart_time >= "2015-06-12 19:45:00" AND t.bookingstart_time <= "2015-06-12 22:15:00") OR 
(t.bookingstart_time >= "2015-06-12 19:45:00" AND t.bookingend_time <= "2015-06-12 22:15:00")) ) AND
`res_id` = '21' AND
`area_id` = '28' AND 
`wait_table` = 'no' AND
`availability` = 'yes';
结果集:


任何机构可以帮助我重写查询与左外连接或可以优化查询

您的外键是CSV?我不这么认为!请参阅规范化。@外键名称为bookingsection_id。但是我正在bookingsection_id中保存str_id值。请修复数据结构以使用单独的连接表,这是在关系数据库中存储数字列表的正确方法。此外,如果语言规则阻止您将列声明为外键,则不要将其称为外键。