How to Inner join two anonymous tables [SQL] - sql

as the title states, Let's say i have three tables: person, autos, numbers.
Created
First table with: INNER JOIN of person and autos
Second Table with: INNER JOIN of autos and numbers
Question: Is it possible to INNER JOIN first and second table ?

You can join the two tables based on the autos part. Assuming it has an ID:
SELECT *
FROM first_table f
JOIN second_table s ON f.auto_id = s.auto_id

You can do 2 joins (with 3 tables) together. Which are the keys for the joins? personID for person and autos and on numbers
SELECT *
FROM person p
JOIN autos a ON p.keyA= a.keyA
JOIN numbers n ON a.keyB = n.keyB
Where keyA and keyB are the corresponding field on which you want to do the join.

Related

SQL column added twice during INNER JOIN

I am trying to join two tables from a database; energyImport and sunAlt.
energyImport has three columns: timestamp_id, energy, duration.
sunAlt has two columns: timestamp_id, altitude
I am doing an inner join on these two tables using the SQL:
SELECT *
FROM energyImport
INNER JOIN sunAz ON sunAz.timestamp_id = energyImport.timestamp_id;
The output from this is:
timestamp_id,duration,energy,timestamp_id,altitude
1601769600,1800,81310,1601769600,0.0
1601771400,1800,78915,1601771400,0.0
1601773200,1800,78305,1601773200,0.0
The problem is that the timestamp_id column is repeated. How can I join these columns and only include the first timestamp_id?
Replace the * with
energyImport.timestamp_id,energyImport.duration, energyImport.energy,
sunAz.altitude
Either you specify the columns that you want in the results:
SELECT e.timestamp_id, e.duration, e.energy, s.altitude
FROM energyImport e INNER JOIN sunAz s
ON s.timestamp_id = e.timestamp_id;
Or, use NATURAL instead of INNER join, so that the join is based on the columns(s) with the same names of the 2 tables (if this fits your requirement), because NATURAL join returns only 1 of each pair of these columns:
SELECT *
FROM energyImport NATURAL JOIN sunAz;
See the demo.

SQLite select query if inner join query doesn't exists

I have two tables, one for all the foods which contains food id, default name and other foods values.
Another table is for the food name translations which contains food id, language id, translation.
What i want to do is join between these tables by the food id to get the translation for food id = 5 for example and language id = 1 which is Spanish for example. and i do it by:
SELECT *
FROM Foods
INNER JOIN FoodNameTranslations USING(Food_ID)
WHERE Food_ID = 5
AND Language_ID = 1
Now what if the the 'FoodNameTranslations' table doesn't have a translation for Food_ID 5 and Language 1?
then i want to simply get the food row with food id = 5 from the 'Foods' table (that contains the default name).
How can i make one query that does this? thanks!
You would do a LEFT JOIN and put the language ID into the join condition.
SELECT
COALESCE(t.TranslatedName, f.DefaultName) FoodName
FROM
Foods f
LEFT JOIN FoodNameTranslations t ON t.Food_ID = f.Food_ID AND t.Language_ID = 1
WHERE
f.Food_ID = 5
You cando do this by changing the JOIN condition:
INNER JOIN gets all records that are common between both tables based on the supplied ON clause.
LEFT JOIN gets all records from the LEFT linked and the related record from the right table ,but if you have selected some columns from the RIGHT table, if there is no related records, these columns will contain NULL.
RIGHT JOIN is like the above but gets all records in the RIGHT table.
FULL JOIN gets all records from both tables and puts NULL in the columns where related records do not exist in the opposite table.
Try using LEFT JOIN instead INNER JOIN, you query will be like this:
SELECT *
FROM Foods
LEFT JOIN FoodNameTranslations USING(Food_ID)
WHERE Food_ID = 5
AND Language_ID = 1

How can I put join in 3 tables?

I am having three tables. Main table which I want to show contain all the data whereas the other two tables contain the values whose reference ID's are available in main table. I want to show all the values from main table along with the values whose references are available in other two tables.
PART_ID and SERIAL_ID values are available in Table B and Table C respectively. How can i show the data?
I am using inner join which shows result but not as per my requirement.
Here is my SQL code:
SELECT
TEMP_RMA_ENQUIRY.TEMP_ID,
PART_NUMBER_TBL.PART_NO,
PART_SERIAL.SERIAL_NUM
FROM TEMP_RMA_ENQUIRY
INNER JOIN PART_NUMBER_TBL
ON TEMP_RMA_ENQUIRY.RMA_PART_NO=PART_NUMBER_TBL.PARTID
INNER JOIN PART_SERIAL
ON TEMP_RMA_ENQUIRY.RMA_SERIAL_NO=PART_SERIAL.SERIAL_ID
Use Left Join Instead of Inner JOIN
Try this
SELECT TEMP_RMA_ENQUIRY.TEMP_ID,
PART_NUMBER_TBL.PART_NO,
PART_SERIAL.SERIAL_NUM
FROM TEMP_RMA_ENQUIRY
LEFT JOIN PART_NUMBER_TBL
ON TEMP_RMA_ENQUIRY.RMA_PART_NO=PART_NUMBER_TBL.PARTID
LEFT JOIN PART_SERIAL
ON TEMP_RMA_ENQUIRY.RMA_SERIAL_NO=PART_SERIAL.SERIAL_ID

Why does this query produce the same information?

I am using the Lyric Database. I am wondering why this query produces the same information:
SELECT M.LastName, A.ArtistName
FROM members M
LEFT JOIN XRefArtistsMembers X USING(MemberID)
JOIN Artists A on X.ArtistID = A.ArtistID;
And
SELECT M.LastName, A.ArtistName
FROM members M
INNER JOIN XRefArtistsMembers X USING(MemberID)
JOIN Artists A on X.ArtistID = A.ArtistID;
There are no errors. I can post relevent records from the tables by request.
INNER JOIN only chooses only those entries from the two joined tables, where the values from the fields in the JOIN clause match in both tables.
LEFT JOIN chooses all entries from the first table, combined with either the matched entries from the second table or with NULL values instead, if there was no match.
If every row from the first table had a match in the second table on the field mentioned in the JOIN clause, then both INNER JOIN and LEFT JOIN will produce the same results.

I want to retrieve data from 4 tables in SQL Server

I want to retrieve data from 4 tables. Patient table has id as PK which is the foreign key in other three tables ett, phar and ssc. Where a patient lie in only one category. i.e patient id pt1 exists in either of the 3 tables. now I want to retrieve patient info along with its associated category.
My query is:
SELECT *
FROM Patient p
INNER JOIN ETT t
ON p.Patient_ID = t.Patient_ID || INNER JOIN Pharmacological ph
ON p.Patient_ID = ph.Patient_ID
I used OR clause because I want only 1 inner join executing at one time. but its not giving me results, any suggestions??
....Patient table has ID as PK which is the foreign key in other three
tables name: ett, phar and ssc where a patient lie in only one
category. Example, patient id pt1 exists in either of the 3 tables.
Based on your statement, you can join all the tables in table Patient using LEFT JOIN since a record can only exist on one table. The query below uses COALESCE which returns the first non-null value with int the list.
The only thing you need is to manually specify the column names that you want to be shown on the list as shown below.
SELECT a.*,
COALESCE(t.colA, p.ColA, s.ColA) ColA,
COALESCE(t.colB, p.ColB, s.ColB) ColB,
COALESCE(t.colN, p.ColN, s.ColN) ColN
FROM Patient a
LEFT JOIN ETT t
ON a.Patient_ID = t.Patient_ID
LEFT JOIN Phar p
ON a.Patient_ID = p.Patient_ID
LEFT JOIN SSC s
ON a.Patient_ID = s.Patient_ID
To further gain more knowledge about joins, kindly visit the link below:
Visual Representation of SQL Joins
For or - do not ise ||, use "or"
You cannot join with or, you need re-format your query.