当另一个表有多行对应于母表中的一行时,如何执行表连接

时间:2013-12-17 07:52:24

标签: mysql

我有两张桌子 - > tbl_book_details and tbl_table_traking

tbl_book_details has columns bd_book_code,
  bd_isbn,
  bd_title,
  bd_edition,
  bd_author,
  bd_publisher,
  bd_supplier,
  bd_page,
  bd_price_type,
  bd_cost_price,
  bd_price,
  bd_Tax,
  bd_covering,
  bd_availability,
  bd_keywords,
  bd_notes,
  bd_details,
  bd_news_latter,
  bd_etDate,
  bd_weight,
  bd_expire_date,
  bd_status 



tbl_table_traking has columns 
 tt_id,
  tt_action,
  tt_table,
  tt_record_id,
  tt_on_date,
  tt_user,
  tt_status 

该过程是在tbl_book_details上定义的触发器,在插入/修改的情况下,插入tbl_table_traking中的数据以便在何时修改记录以及谁修改记录。

直到现在我一直在使用以下查询,这不是加入 - > <>

SELECT 
  tbl_books_details.bd_book_code AS bkid,
  tbl_books_details.bd_isbn,
  tbl_books_details.bd_title AS title,

  -- This part is what I believe is slowing down my query
  (SELECT 
    tt_on_date 
  FROM
    tbl_table_tracking 
  WHERE tt_action = 'MODIFY' 
    AND tt_record_id = tbl_books_details.bd_book_code ORDER BY tt_on_date) AS bd_etdate

当记录数低于300万时它工作正常,但现在脚本超时了。

我在“tbl_table_traking”和tt_ondate上的tt_action上建立了索引,

如果有任何方法可以将其转换为联接或提高性能?

表traking查询返回修改记录的最新日期。

我的数据库是在mysql中。

1 个答案:

答案 0 :(得分:0)

你应该可以做这样的事情。

SELECT 
tbl_books_details.bd_book_code AS bkid,
tbl_books_details.bd_isbn,
tbl_books_details.bd_title AS title,
tbl_table_traking.tt_on_date
FROM
tbl_books_details
INNER JOIN tbl_table_tracking
tbl_books_details.bd_book_code = tbl_table_tracking.tt_record_id
WHERE tt_action = 'MODIFY';

希望这会有所帮助......