Предположим, у вас есть таблицы A и B:
CREATE TABLE A (
id1
id2
creationDate
...
);
CREATE TABLE B (
id1
id2
lastUsedDate
...
);
Вы хотели бы выполнить выборку, которая объединяет эти две таблицы, однако один из столбцов, к которым вы хотите присоединиться, имеет другойимя, чем другой столбец.
Если вы хотите присоединиться только к первым двум столбцам, вы можете выполнить этот запрос:
SELECT
id1
, id2
, ...
FROM A
JOIN B using(id1, id2)
;
Однако, если вы также хотите присоединиться к дате, вы вынуждены выполнить этот запрос:
SELECT
a.id1
, a.id2
, ...
FROM A a
JOIN B b ON
a.id1=b.id1
AND a.id2=b.id2
AND a.creationDate=b.lastUsedDate
;
Этот запрос гораздо более многословен, и если вы опустите a.id1
и вместо этого воспользуетесь id1
, postgres пожалуется, что id1
неоднозначно, несмотря на то, чточто, поскольку вы используете INNER JOIN
, столбец не может быть неоднозначным.
Есть ли способ объединить функциональность using()
и дополнительного столбца, который не имеет того же имени?Или вы вынуждены использовать дополнительное многословие в последнем примере.