CREATE TABLE medico(
cod_medico NUMBER(5),
cod_reparto NUMBER(5),
nome VARCHAR2(30),
cognome VARCHAR2(30),
specializzazione VARCHAR2(30),
recapito VARCHAR2(10),
primario VARCHAR2 (2)
);
CREATE TABLE paziente (
codice_fiscale VARCHAR2(16),
cod_paziente number(5),
nome VARCHAR2(30),
cognome VARCHAR2(30),
recapito VARCHAR2(10),
sesso VARCHAR2(1),
altezza VARCHAR2(4),
peso VARCHAR2(4),
data_nascita DATE,
gruppo_sanguigno VARCHAR2(3)
);
CREATE TABLE visita(
cod_visita NUMBER(5),
codice_fiscale VARCHAR2(16),
cod_medico NUMBER(5),
data_visita DATE,
prescrizione VARCHAR2(300),
referto VARCHAR2(8),
sintomi VARCHAR2(300)
);
SELECT *
FROM (SELECT *
FROM medico JOIN visita
ON medico.cod_medico = visita.cod_medico)
JOIN(
SELECT *
FROM paziente JOIN visita
ON paziente.codice_fiscale = visita.codice_fiscale)
ON paziente.codice_fiscale = visita.codice_fiscale;
错误:
ORA-00904: "VISITA"."CODICE_FISCALE": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Errore alla riga: 9, colonna: 30
答案 0 :(得分:1)
表paziente仅存在于内联视图(子查询)的范围内。因为您已将表放在子查询中,所以最终的ON子句无法看到''表名。根据您正在尝试完成的内容,您需要将表直接相互连接,而不是通过子查询。如,
SELECT *
FROM medico
JOIN vista ON medico.cod_medico = visita.cod_medico
JOIN paziente ON paziente.codice_fiscale = visita.codice_fiscale
如果这不是您想要实现的目标,请描述表格的结构以及您尝试对子查询执行的操作。另一种方法是保留子查询,但为它们添加别名并明确表示您尝试加入的内容,例如,
SELECT *
FROM (SELECT *
FROM medico JOIN visita
ON medico.cod_medico = visita.cod_medico) AS a
JOIN(
SELECT *
FROM paziente JOIN visita
ON paziente.codice_fiscale = visita.codice_fiscale) AS b
ON a.codice_fiscale = b.codice_fiscale;
这是这个想法的一个例子,但由于在子查询中使用了两次相同的列名,它几乎肯定会失败 - 你需要用实际字段替换*工作。