Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 - Fatal编程技术网

Mysql 如何将左连接转换为子查询?

Mysql 如何将左连接转换为子查询?,mysql,Mysql,我是mysql的初学者,我已经编写了一个查询,使用左连接来获取查询中提到的列,我想将该查询转换为子查询,请帮助我 SELECT b.service_status, s.b2b_acpt_flag, b2b.b2b_check_in_report, b2b.b2b_swap_flag FROM user_booking_tb AS b LEFT JOIN b2b.b2b_booking_tbl AS b2b ON b.booking_id=b2b.gb_b

我是mysql的初学者,我已经编写了一个查询,使用左连接来获取查询中提到的列,我想将该查询转换为子查询,请帮助我

SELECT b.service_status,
       s.b2b_acpt_flag,
       b2b.b2b_check_in_report,
       b2b.b2b_swap_flag
FROM user_booking_tb AS b
LEFT JOIN b2b.b2b_booking_tbl AS b2b ON b.booking_id=b2b.gb_booking_id
LEFT JOIN b2b.b2b_status AS s ON b2b.b2b_booking_id = s.b2b_booking_id
WHERE b.booking_id='$booking_id'

在这种情况下,我们实际上建议使用联接,只要在两个表中的联接列上都有适当的索引,这种联接通常会更快

即使使用子查询,您仍然需要这些连接

实际数据的大小和性质将影响性能,所以要确定您最好同时测试选项和测量结果。但是,请注意,随着表的增长,最佳查询可能会切换

SELECT b.service_status,
      (SELECT b2b_acpt_flag FROM b2b_status WHERE b.booking_id=b2b_booking_id)as b2b_acpt_flag,
      (SELECT b2b_check_in_report FROM b2b_booking_tbl  WHERE b.booking_id=gb_booking_id) as b2b_check_in_report,
      (SELECT b2b_check_in_report FROM b2b_booking_tbl  WHERE b.booking_id=gb_booking_id) as b2b_swap_flag
FROM user_booking_tb AS b
WHERE b.booking_id='$booking_id'
要深入了解此查询的工作原理,您需要对主查询返回的每一行执行3个附加查询。 如果b.booking_id='$booking_id'是唯一的,这是额外的3个查询,但是如果可能有多个条目,这可能会成倍增加,并且变得非常缓慢

这些额外的查询中的每一个都将是快速的,没有网络开销,单行,希望在主键上匹配。因此,只要数量少,3个额外的查询就是名义性能

一个连接将导致跨2个索引表的单个查询,这通常会缩短几毫秒

子查询可能工作的另一个实例是过滤结果,而不是向输出中添加额外的列

SELECT b.*
FROM user_booking_tb AS b
WHERE b.booking_id in (SELECT booking_id FROM othertable WHERE this=this and that=that)

根据预订id的典型列表的大小,会影响哪一个更有效。

在这种情况下,实际上会建议使用联接,只要两个表中的联接列上有适当的索引,通常会更快

即使使用子查询,您仍然需要这些连接

实际数据的大小和性质将影响性能,所以要确定您最好同时测试选项和测量结果。但是,请注意,随着表的增长,最佳查询可能会切换

SELECT b.service_status,
      (SELECT b2b_acpt_flag FROM b2b_status WHERE b.booking_id=b2b_booking_id)as b2b_acpt_flag,
      (SELECT b2b_check_in_report FROM b2b_booking_tbl  WHERE b.booking_id=gb_booking_id) as b2b_check_in_report,
      (SELECT b2b_check_in_report FROM b2b_booking_tbl  WHERE b.booking_id=gb_booking_id) as b2b_swap_flag
FROM user_booking_tb AS b
WHERE b.booking_id='$booking_id'
要深入了解此查询的工作原理,您需要对主查询返回的每一行执行3个附加查询。 如果b.booking_id='$booking_id'是唯一的,这是额外的3个查询,但是如果可能有多个条目,这可能会成倍增加,并且变得非常缓慢

这些额外的查询中的每一个都将是快速的,没有网络开销,单行,希望在主键上匹配。因此,只要数量少,3个额外的查询就是名义性能

一个连接将导致跨2个索引表的单个查询,这通常会缩短几毫秒

子查询可能工作的另一个实例是过滤结果,而不是向输出中添加额外的列

SELECT b.*
FROM user_booking_tb AS b
WHERE b.booking_id in (SELECT booking_id FROM othertable WHERE this=this and that=that)

根据预订id的典型列表的大小,将影响哪个更有效。

为什么要转换此查询?我只想了解如何将join转换为sub query,如果存在更多记录,则获取记录需要时间。我想区分子查询和联接的速度。为什么要转换此查询?我只想了解如何将联接转换为子查询,并且存在更多记录。获取记录需要时间。我想区分子查询和连接的速度。您能否详细说明这两个查询的执行情况,即关于速度的任何原因?如果我想在where子句
where b.booking\u id='$booking\u id'和b2b\u swap\u标志中添加一个条件!='1'
b2b_-swap_标志
列来自
b2b_-booking_-tbl
那么我可以如何更改查询请帮助我。您可以详细说明这两个查询的执行情况,即关于速度的任何原因吗?如果我想在where子句
where b.booking_id='$booking_id'和b2b_-swap_标志中添加一个条件1'
b2b\u交换\u标志
列来自
b2b\u预订\u tbl
那么我如何更改查询请帮助我。