Mysql 如何将左连接转换为子查询?
我是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
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
那么我如何更改查询请帮助我。