2010-04-19 12 views
2

방금 ​​조인 테이블에서 열 이름을 반복하기 때문에 데이터베이스 호출의 별명을 지정해야한다는 것을 알았습니다. 자동으로 SQL에 모든 열 이름의 별칭을 지정하여 테이블 이름의 접두사가 반환되도록 할 수 있습니까? 그렇지 않으면 그것들 중 일부만 앨리어싱 될 때 매우 혼란스럽게 보입니다. 그냥 여분의 코드를 작성하지 않고 일관성을 유지하려고 노력하십시오.SQL에 자동 앨리어싱 결합이 남았습니까?

$sql = "SELECT contracts.po_number, contracts.start_date, contracts.end_date, contracts.description, contracts.taa_required, contracts.account_overdue, jobs.id AS jobs_id, jobs.job_number, companies.id AS companies_id, companies.name AS companies_name 
    FROM contracts 
    LEFT JOIN jobs ON contracts.job_id = jobs.id 
    LEFT JOIN companies ON contracts.company_id = companies.id 
    WHERE contracts.id = '$id' 
    ORDER BY contracts.end_date"; 

답변

4

아니,하지만 당신은 테이블 별칭을 사용하여 좀 더 쉽게 생활을 할 수 있습니다 :

SELECT c.po_number, c.start_date, c.end_date, c.description, 
    c.taa_required, c.account_overdue, j.id AS jobs_id, j.job_number, 
    cm.id AS companies_id, cm.name AS companies_name 
FROM contracts c 
LEFT JOIN jobs j ON c.job_id = j.id 
LEFT JOIN companies cm ON c.company_id = cm.id 
WHERE c.id = '$id' 
ORDER BY c.end_date 
+0

테이블 이름의 별명을 지정하는 경우 고유 한 열 이름을 별칭으로 사용해야합니까? – uberdanzik

+0

@ Dan : 예, 위의 예와 마찬가지로해야합니다. –

+0

예제 코드를 사용해 주셔서 감사합니다. – uberdanzik

0

당신이 더 적은을 쓸 필요가 귀하의 SQL 문에서 별칭 테이블을 사용하지만, 실제로에 액세스 할 수 있습니다 PHP에서 열에는 이름으로 액세스하려는 경우 별칭을 붙이는 방법이 없습니다.

당신은 또한 PHP에서 인덱스 컬럼에 액세스 할 수 있습니다,하지만 그건 내가 별칭 테이블 이름 항상에 추천 할 것입니다 유지 보수 악몽

0

입니다. 별칭을 건너 뛰면 나중에 읽는 것이 매우 어렵습니다. 정보에 대한

0

는 MySQL의 5.6에서 잡았다을 프로그래머 (아마도 다른 사람!)

SELECT *이 표 에서 왼쪽은 PKI = 전경련 ON

기대 작품으로 ..하지만 최근에 내가 mispelt 'LEFT 표 2를 가입 '로'LEFY '쿼리를 사용하고 있지만 표준 연결도 가능합니다. 그래서 그러므로 표 FROM

SELECT * 는 LEFY

또한 단어 LEFY에 대한 대체를처럼 잘 작동 PKI = 전경련 ON 표 2 가입하세요, 그래서 당신의 쿼리를 변경 오타 조심!

+0

대부분의 SQL dbms는 이러한 종류의 오류를 허용하지 않습니다. 첫째, "pk1 = fk1"(모호한 열 참조, SQL 상태 42702)과 같은 조인 식에서 오류가 발생할 가능성이 높습니다. * *를 수정하여 "table1.pk1 = table2.fk1"을 읽으면 다른 오류가 발생할 수 있습니다. dbms는 "lefy"를 "table1"테이블의 별칭으로 취급하므로 잘못된 FROM 절 또는 이와 유사한 오류가 발생할 수 있습니다. 이것은 DB2, PostgreSQL 및 SQL Server에서 확실히 사실입니다. 다른 주류 SQL dbms가 다르게 동작하면 놀라실 것입니다. (MySQL을 제외하고 MySQL에 관한 어떤 것도 나를 놀라게하지 않습니다.) –