Select from two tables which have no relation - sql

I don't know if it is possible or not. If possible, please help me to resolve this.
I have two tables, table1 and table2:
table1 table2
column1 column2 column3 column4
1 2 A B
3 4 C D
There is no relation between table1 and table2. I want to execute a query so that my output looks like this:
Output table:
column1 column2 column3 column4
1 2 A B
1 2 C D
3 4 A B
3 4 C D
Can anyone please tell me how can I achieve this? We are using SQL Server 2005.
Thanks,
Kartic

This is called a cross join, which produces a Cartesian product of all the records in each of the tables. The best way to do this is explicitly, with the cross join syntax:
select t1.*, t2.*
from table1 t1 cross join
table2 t2;
Note that if either table is empty, then you will not get any rows back.

You need to use cross join.
select t1.*,t2.* from table1 t1
Cross Join table2 t2;

Like this?
SELECT * FROM table1 CROSS JOIN table2
It's called a cross join, or cartesian product.
You can add additional filtering or join conditions using WHERE.

Related

Join two tables without relationship, add 1 to many

I've been frequenting this site for awhile now but this time, I didn't find any answers around this question so here goes.
I have two tables that do not have any PK/FK or relationship otherwise. What I am trying to do is the following.
Table 1
Column A
A
B
C
Table 2
Column B
1
2
3
Desired Result:
Combined Table
Column A Column B
A 1
A 2
A 3
B 1
B 2
B 3
C 1
C 2
C 3
Pretty much, for every value in the first table, append the full list of the second table until there's no more.
I hope this makes sense on what I am trying to achieve.
Thank you!
You need to use cross join:
SELECT ColumnA, ColumnB
FROM table1
CROSS JOIN table2
ORDER BY ColumnA;
As alluded to in other answers, you'll want to use CROSS JOIN which will give you the Cartesian product of the two tables:
SELECT t1.columnA, t2.columnB
FROM t1 CROSS JOIN t2;
You might see this expressed in older code like this:
SELECT t1.columnA, t2.columnB
FROM t1, t2;
"Cartesian product" is a term from mathematics: the Cartesian product of two sets X and Y (tables in relational databases are actually sets) is the set of all ordered pairs (x,y) where x in X and y in Y. In your case you are getting the Cartesian product of the sets all values of column A in t1 and all values of column B in t2.
Hope this helps.
This should do it:
SELECT ColumnA, ColumnB
FROM TableA
CROSS JOIN TableB
SELECT *
FROM Table1
CROSS JOIN Table2

SQL subquery to get all combination in two different selected sets

I have question to regarding a query I am writing:
I have two different (columns) data sets which I want to combine the result of, for instance:
Set 1: Set 2:
1 A
2 B
3 C
I want to create a query with the result:
resultset:
1 A
1 B
1 C
2 A
2 B
2 C
3 A
3 B
3 C
Is this possible using a JOIN or UNION?
So I get all possible combinations between the different rows?
Thank you for helping out!
What you want to do is a cartesian join
SELECT
S1.col1,
S2.col2
FROM
S1,S2
Please see the example in the fiddle
You are looking for cross join:
select t1.col1, t2.col1
from table1 t1 cross join
table2 t2
order by t1.col1, t2.col1;

SQL - Join two query in same query with two rows

i have one query that i need include the status in another row, i think that it's easy but i'm not remember it..
status
A
B
C
D
job
1
2
3
i want a output like:
job status
1 A
1 B
1 C
1 D
2 A
2 B
2 C
2 D
...
Can anyone help?
that is called CROSS JOIN
SELECT *
FROM status CROSS JOIN job;
I'm just guessing your table layout here because you did not give it in your question.
SELECT t1.job, t2.status
FROM t1 INNER JOIN t2 ON t1.something = t2.something
Note that if you had given the table structure something, t1 and t2 would actually be the real names.
If there is no particular key and you just want to match every value of t1.job to every value of t2.status then this will do the job:
SELECT t1.job, t2.status
FROM t1, t2
You might want to read a little bit about JOINs in SQL, here's a good resource:
http://www.w3schools.com/sql/sql_join.asp
As per your case, you can simply do:
SELECT * FROM job, status
Assuming that those are table names and these are the only columns in there.
EDIT:
Link with explanation on how CROSS JOIN works as well:
http://www.w3resource.com/sql/joins/cross-join.php

Query from table based on some condition

I have a scenario like this, there are 2 tables table_1 and table_2. Both table have a common column called column_1(no foreign_Key constraints!!). Table_1 can have some extra rows which are not present in table_2(In other words, table_2 is a sub-set of table_1). I want to list all those items which are only present in table_1 but not in table_2.
Kindly help in writing the sql query for the same.
Thanks in advance.
SELECT a.*
FROM table1 a
LEFT JOIN table2 b
on a.column_1 = b.column_1
WHERE b.column_1 IS NULL
if those two tables are not related with each other, better add an index on table1.column_1 and table2.column_1 so that it won't require full table scan (which slows the performance)
select * from table1
inner join table2 on table1.column1=table2.column1
select a.* from table1 a left outer join table2 b on a.col1=b.col1;

How do I Write a SQL Query With a Condition Involving a Second Table?

Table1
...
LogEntryID *PrimaryKey*
Value
ThresholdID - - - Link to the appropriate threshold being applied to this log entry.
...
Table2
...
ThresholdID *PrimaryKey*
Threshold
...
All fields are integers.
The "..." thingies are there to show that these tables hold a lot more imformation than just this. They are set up this way for a reason, and I can't change it at this point.
I need write a SQL statement to select every record from Table1 where the Value field in that particular log record is less than the Threshold field in the linked record of Table2.
I'm newish to SQL, so I know this is a basic question.
If anyone can show me how this SQL statement would be structured, it would be greatly appreciated.
SELECT T1.*
FROM Table1 T1
JOIN Table2 T2 ON T2.ThresholdID = T1.ThresholdID
WHERE T2.Threshold > T1.Value
SELECT t1.*
FROM dbo.Table1 t1 INNER JOIN dbo.Table2 t2 ON t1.ThresholdID = t2.ThresholdID
WHERE t2.Threshold > t1.Value
SELECT * from table1 t1 join table2 t2 on (t1.thresholdId = t2.thresholdId)
where t1.value < t2.threshold;
SELECT t1.LogEntryID, t1.Value, t1.ThresholdID
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.ThresholdID = t2.ThresholdID
WHERE t1.Value < t2.threshold
SELECT * FROM Table1
JOIN Table2
ON table1.ThresholdID = table2.ThresholdID --(assuming table 2 holds the same value to link them together)
WHERE
value < thresholdvalue
A 'JOIN' connects 2 tables based on the 'ON' clause (which can be multipart, using 'AND' and 'OR')
If you have 3 entries in table 2 which share table1's primary key (a one-to-many association) you will receive 3 rows in your result set.
for the tables below, for example:
Table 1:
Key Value
1 Hi
2 Bye
Table 2:
Table1Key 2nd_word
1 You
1 fellow
1 friend
2 now
this query:
SELECT * FROM Table1
JOIN Table2
on table1.key = table2.table1key
gets this result set:
Key Value Table1Key 2nd_word
1 Hi 1 You
1 Hi 1 fellow
1 Hi 1 friend
2 Bye 2 now
Note that JOIN will only return results when there is a match in the 2nd table, it will not return a result if there is no match. You can LEFT JOIN for that (all fields from the second table will be NULL).
JOINs can also be strung together, the result from the previous JOIN is used in place of the original table.