동일한 쿼리에서 서로 다른 정보를 가진 2 개의 MySQL 테이블 조인

페드로

나는 이것에 대한 해결책을 찾기 위해 3 일 동안 검색했으며 수십 개의 쿼리를 시도했지만 지금까지 아무것도 작동하지 않았습니다 ... :(

테이블이 users있고 열이있는 사용자를 나열하고 있습니다.user_type = 2

여태까지는 그런대로 잘됐다...

그런 다음 테이블이 feedback있고 사용자 목록과 각 사용자가 가지고있는 평균 피드백을 동일한 쿼리에 넣고 싶습니다 (일부 사용자는 피드백이 없으므로 피드백 테이블에도 나열되지 않음).

지금까지 무언가를 반환 한 유일한 쿼리는 다음과 같습니다.

SELECT DISTINCT u.user_id, u.company_name, u.post_code, u.about_company, avg(fd.rating) AS rating FROM users u LEFT JOIN feedback fd ON fd.vendor_id = u.user_id WHERE u.user_type=2 ORDER BY u.user_id ASC 

이제 "피드백"테이블에는 현재 피드백이있는 회사가 하나뿐입니다. 그러나이 목록은 user_type = 2 열이있는 모든 사용자를 반환해야합니다. 이는 약 20 개 정도입니다. 문제는 결과가 단 1 개 회사 (내가 회사 만 나열 할 때 목록의 첫 번째)이지만 피드백이있는 회사도 아니므로 "등급"열이 잘못된 회사에 할당된다는 것입니다.

SOOO ...이 모든 혼란 후에도 누군가가 내가 찾고있는 것을 이해하고 나를 도울 수 있기를 바랍니다. :)

편집 1

users테이블에는 user_id, company_name, post_code, about_company 필드가 있습니다.

feedback테이블에는 feedback_id, job_id, vendor_id (테이블 사용자의 user_id와 동일), rating 필드가 있습니다.

EDIT2

좋아, 나는 이것을 간단하게 유지하려고 노력했다! 내 테이블에는 이보다 훨씬 많은 필드가 있으며 위도와 경도를 고려하여 거리를 계산하기 때문에 실제로 쿼리가 훨씬 더 복잡합니다. 다음은 REAL 쿼리입니다.

SELECT DISTINCT u.user_id, u.company_name, u.post_code, u.about_company, coalesce(avg(fd.rating),0) AS rating FROM users u LEFT OUTER JOIN feedback fd ON  fd.vendor_id = u.user_id WHERE u.lat!='' AND u.longt!='' AND u.status!=0 AND u.user_type=2 AND SQRT( POW( 69.1 * ( u.lat - 38.7376772 ) , 2 ) + POW( 69.1 * ( -9.1269717 - u.longt ) * COS( u.lat / 57.3 ) , 2 ) ) < 100 ORDER BY u.user_id ASC
jbrahy

왼쪽 외부 조인이 필요한 것 같습니다. 귀하의 스키마가 다음과 같다고 가정합니다.

create table users (user_id int, user_type int);
create table feedback (feedback_id int, user_id int, feedback_value int);

SELECT user_id, avg(feedback_value)
FROM users
    LEFT OUTER JOIN feedback USING(user_id)
WHERE users.user_type=2
GROUP BY user_id

0 대 null을 반환하기 위해 거기에 합체를 던지고 싶을 수도 있습니다.

SELECT user_id, coalesce(avg(feedback_value),0) as average_feedback
FROM users
    LEFT OUTER JOIN feedback USING(user_id)
WHERE users.user_type=2
GROUP BY user_id

다음은 작동하는 예입니다.

mysql> create database test_pedro;
Query OK, 1 row affected (0.00 sec)

mysql> use test_pedro;
Database changed

mysql> create table users (user_id int, user_type int);
Query OK, 0 rows affected (0.02 sec)

mysql> create table feedback (feedback_id int, user_id int, feedback_value int);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into users values (1,2), (2,2), (3,3);                                                    
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into feedback values (1,1,4), (2,1,19);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT user_id, coalesce(avg(feedback_value),0) as average_feedback     
FROM users         
    LEFT OUTER JOIN feedback USING(user_id)     
WHERE users.user_type=2     
GROUP BY user_id;

+---------+------------------+
| user_id | average_feedback |
+---------+------------------+
|       1 |          11.5000 |
|       2 |           0.0000 |
+---------+------------------+
2 rows in set (0.00 sec)

mysql>

이것이 예상 된 출력입니까?

다음은 일부 모드로 업데이트 된 쿼리입니다. 특히 DISTINCT를 제거하고 AVG () 함수를 사용하기 위해 GROUP BY를 추가합니다.

SELECT u.user_id,
       u.company_name,
       u.post_code,
       u.about_company,
       Coalesce(Avg(fd.rating), 0) AS rating
FROM   users u
       LEFT OUTER JOIN feedback fd
                    ON fd.vendor_id = u.user_id
WHERE  u.lat != ''
AND u.longt != ''
AND u.status != 0
AND u.user_type = 2
AND Sqrt(Pow( 69.1 * ( u.lat - 38.7376772 ), 2 ) + Pow( 69.1 * ( -9.1269717 - u.longt ) * Cos( u.lat / 57.3 ), 2)) < 100
GROUP  BY u.user_id,
          u.company_name,
          u.post_code,
          u.about_company
ORDER  BY u.user_id ASC

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

동일한 쿼리에서 서로 다른 정보를 가진 2 개의 MySQL 테이블 조인

분류에서Dev

MySQL은 동일한 테이블에서 두 개의 쿼리를 조인

분류에서Dev

동일한 쿼리의 다른 테이블에서 정보 가져 오기

분류에서Dev

다른 테이블에서 2 개의 SQL 쿼리 조인

분류에서Dev

조건이 다른 동일한 테이블에서 mysql 쿼리 내부 조인

분류에서Dev

MySQL은 여러 테이블을 사용하여 서로 다른 조건에서 동일한 데이터의 두 가지 다른 개수를 생성합니다.

분류에서Dev

동일한 개체에 대한 2 개의 약한 참조가 서로 다른 정보를 표시합니다.

분류에서Dev

2 개의 다른 테이블에서 값을 선택하고 동일한 ID를 가진 행에 값을 인쇄합니다.

분류에서Dev

MySQL-동일한 테이블에서 조회가 필요한 다른 값으로 쿼리 구조화

분류에서Dev

한 테이블에서 조건의 합계를 가져 와서 다른 테이블의 동일한 조건에 추가하는 쿼리

분류에서Dev

2 개의 다른 테이블에서 2 개의 쿼리를 조인하는 방법

분류에서Dev

2 개의 다른 테이블과 교차 확인하여 테이블에서 일치하지 않는 레코드를 가져 오는 쿼리

분류에서Dev

MySQL은 2 개의 테이블에서 동일한 값을 2 개의 다른 개수로 계산

분류에서Dev

mysql에서 하나의 쿼리 (3 개의 테이블)에 2 개의 서로 다른 조인을 만드는 방법

분류에서Dev

MySql 조인 테이블 및 2 개의 다른 열이 동일한 경우 열 추가

분류에서Dev

MYSQL은 두 개의 다른 테이블에서 두 개의 다른 열을 단일 열로 조인합니다.

분류에서Dev

MySQL이 두 개의 테이블 ID를 조인하여 한 테이블에서 다른 테이블로 결과 생성

분류에서Dev

MySql은 id = xxx이고 동일한 ID를 가진 행의 다른 테이블에서 최신 열이 1보다 큰 모든 행을 가져옵니다.

분류에서Dev

2 개의 서로 다른 테이블을 조인하는 LINQ 쿼리

분류에서Dev

조인 쿼리를 사용하여 4 개의 다른 테이블에서 레코드 가져 오기

분류에서Dev

다른 테이블을 대상으로하는 2 개의 정규 표현식이있는 MySQL 선택 쿼리 내부 조인 테이블

분류에서Dev

유사한 열하지만 서로 다른 값을 가진 두 개의 테이블을 조인

분류에서Dev

ID를 다시 가져 오는 데 필요한 동일한 테이블을 포함하는 2 개의 SQL 쿼리에 조인

분류에서Dev

동일한 WHERE 절을 가진 두 개의 다른 테이블에서 SELECT?

분류에서Dev

mysql은 동일한 테이블에서 두 개의 쿼리를 병합합니다.

분류에서Dev

MySQL의 다른 테이블에서 동시에 2 개의 열을 참조하는 단일 열

분류에서Dev

동일한 ID를 가진 다른 테이블에서 모든 데이터를 가져 오는 SQL 쿼리

분류에서Dev

2 개의 다른 테이블에서 동일한 데이터를 가져 와서 DB2의 세 번째 테이블과 결합

분류에서Dev

다른 테이블과의 자연 조인에서 필드를 사용하여 한 테이블에서 mySQL DELETE?

Related 관련 기사

  1. 1

    동일한 쿼리에서 서로 다른 정보를 가진 2 개의 MySQL 테이블 조인

  2. 2

    MySQL은 동일한 테이블에서 두 개의 쿼리를 조인

  3. 3

    동일한 쿼리의 다른 테이블에서 정보 가져 오기

  4. 4

    다른 테이블에서 2 개의 SQL 쿼리 조인

  5. 5

    조건이 다른 동일한 테이블에서 mysql 쿼리 내부 조인

  6. 6

    MySQL은 여러 테이블을 사용하여 서로 다른 조건에서 동일한 데이터의 두 가지 다른 개수를 생성합니다.

  7. 7

    동일한 개체에 대한 2 개의 약한 참조가 서로 다른 정보를 표시합니다.

  8. 8

    2 개의 다른 테이블에서 값을 선택하고 동일한 ID를 가진 행에 값을 인쇄합니다.

  9. 9

    MySQL-동일한 테이블에서 조회가 필요한 다른 값으로 쿼리 구조화

  10. 10

    한 테이블에서 조건의 합계를 가져 와서 다른 테이블의 동일한 조건에 추가하는 쿼리

  11. 11

    2 개의 다른 테이블에서 2 개의 쿼리를 조인하는 방법

  12. 12

    2 개의 다른 테이블과 교차 확인하여 테이블에서 일치하지 않는 레코드를 가져 오는 쿼리

  13. 13

    MySQL은 2 개의 테이블에서 동일한 값을 2 개의 다른 개수로 계산

  14. 14

    mysql에서 하나의 쿼리 (3 개의 테이블)에 2 개의 서로 다른 조인을 만드는 방법

  15. 15

    MySql 조인 테이블 및 2 개의 다른 열이 동일한 경우 열 추가

  16. 16

    MYSQL은 두 개의 다른 테이블에서 두 개의 다른 열을 단일 열로 조인합니다.

  17. 17

    MySQL이 두 개의 테이블 ID를 조인하여 한 테이블에서 다른 테이블로 결과 생성

  18. 18

    MySql은 id = xxx이고 동일한 ID를 가진 행의 다른 테이블에서 최신 열이 1보다 큰 모든 행을 가져옵니다.

  19. 19

    2 개의 서로 다른 테이블을 조인하는 LINQ 쿼리

  20. 20

    조인 쿼리를 사용하여 4 개의 다른 테이블에서 레코드 가져 오기

  21. 21

    다른 테이블을 대상으로하는 2 개의 정규 표현식이있는 MySQL 선택 쿼리 내부 조인 테이블

  22. 22

    유사한 열하지만 서로 다른 값을 가진 두 개의 테이블을 조인

  23. 23

    ID를 다시 가져 오는 데 필요한 동일한 테이블을 포함하는 2 개의 SQL 쿼리에 조인

  24. 24

    동일한 WHERE 절을 가진 두 개의 다른 테이블에서 SELECT?

  25. 25

    mysql은 동일한 테이블에서 두 개의 쿼리를 병합합니다.

  26. 26

    MySQL의 다른 테이블에서 동시에 2 개의 열을 참조하는 단일 열

  27. 27

    동일한 ID를 가진 다른 테이블에서 모든 데이터를 가져 오는 SQL 쿼리

  28. 28

    2 개의 다른 테이블에서 동일한 데이터를 가져 와서 DB2의 세 번째 테이블과 결합

  29. 29

    다른 테이블과의 자연 조인에서 필드를 사용하여 한 테이블에서 mySQL DELETE?

뜨겁다태그

보관