주문 테이블: order
주문 상품 테이블: order_goods
즉, order_goods는 각 주문의 모든 항목을 Order에 저장합니다. 제품 정보
적격한 주문에 어떤 제품이 포함되어 있는지 확인해야 합니다.
예: 주문 테이블에서 order_no가 20160804164336873986인 주문을 찾고 싶습니다. 그러면 order 및 order_goods의 모든 필드가 나열됩니다.
주문 테이블: order
주문 상품 테이블: order_goods
즉, order_goods는 각 주문의 모든 항목을 Order에 저장합니다. 제품 정보
적격한 주문에 어떤 제품이 포함되어 있는지 확인해야 합니다.
예: 주문 테이블에서 order_no가 20160804164336873986인 주문을 찾고 싶습니다. 그러면 order 및 order_goods의 모든 필드가 나열됩니다.
order_goods에는 하나의 order_id에 대한 여러 레코드가 있으므로 order_goods가 주문 쿼리에 연결된 상태로 남아 있으므로 연결 쿼리 문의 실행 효율성이 높지 않아 최적화가 필요합니다
<code>SELECT * FROM order_goods og LEFT JOIN order o ON o.id=og.order_id</code>
<code>SELECT * FROM order a JOIN IN order_goods b ON a.id=b.order_id WHERE a.order_no='20160804164336873986' 大概是这样,不知道写错没有</code>
일대다 연관 모델
위 답변 중 일부를 읽어보니 질문의 요구 사항을 충족할 수 있을 것 같습니다. 강박장애가 있는 저는 주제를 질의할 때 *
기호를 사용하면 안 된다는 점을 말씀드리고 싶습니다. 원하는 만큼 필드를 작성하고, 필드 이름을 같은 이름으로 바꾸세요.
Join과 Split을 두 개의 쿼리로 사용하지 않는 것이 좋습니다. 또한 SELECT *
도 사용하지 않는 것이 좋습니다.
나도 약간의 강박장애가 있습니다. 최근에 인덱스에 노출된 적이 있습니다. mysql을 보면 쿼리할 조건 필드가 인덱스되어 있는지 묻고 싶습니다.
위 답변을 확인한 후 먼저 주문 테이블의 데이터를 쿼리한 다음 루프를 사용하여 각 번호 ID에 해당하는 order_goods 테이블의 데이터를 쿼리합니다. 이렇게 하면 별도의 쿼리로 인해 MySQL이 즉시 정지되지는 않습니다. (물론 데이터의 양이 특히 많을 때 보게 될 것입니다. 데이터의 양이 적다면 Left Join 사용에 대해서는 언급하지 않겠습니다.)
다중 테이블 쿼리. 관련
<code>select * from order,order_goods where order.id = order_goods.order_id and order.id = '20160804164336873986'; select * form order inner join order_goods on order.id = order_goods.order_id where order.id = '20160804164336873986';</code>
위의 두 가지 작성 방법은 동일하며, 두 개의 테이블 연결을 구현합니다.
세 개의 테이블 연결을 작성하는 방법도 유사합니다. 예를 들어 ID가 1인 학생의 과목과 성적을 쿼리합니다.
<code>SELECT * FROM `student`, `score`, `course` WHERE `student`.`id` = `score`.`student_id` AND `score`.`course_id` = `course`.`id` AND `student`.`id` = 1; SELECT * FROM `student` INNER JOIN `score` ON `score`.`student_id` = `student`.`id` INNER JOIN `course` ON `course`.`id` = `score`.`course_id` WHERE `student`.`id` = 1;</code>