One example involves manipulation of select statement in SQL
(SQL rookie question) I'm Working on a query which could find all the Worker who create products that include all the products created by Worker with id = 18.
CREATE TABLE Creates(
ID CHAR(10),
PRODUCTID CHAR(10),
PRIMARY KEY (ID, PRODUCTID),
FOREIGN KEY(ID) REFERENCES Worker(ID) ON DELETE CASCADE,
};
CREATE TABLE Worker(
ID CHAR(10) PRIMARY KEY,
};
Here are what have in my table Creates now:
INSERT INTO Creates VALUES('2', 'S100');
INSERT INTO Creates VALUES('2', 'D111');
INSERT INTO Creates VALUES('4', 'D111');
INSERT INTO Creates VALUES('4', 'S119');
INSERT INTO Creates VALUES('6', 'S2');
INSERT INTO Creates VALUES('6', 'D231');
INSERT INTO Creates VALUES('8', 'S103');
INSERT INTO Creates VALUES('10', 'S109');
INSERT INTO Creates VALUES('12', 'S189');
INSERT INTO Creates VALUES('14', 'S982');
INSERT INTO Creates VALUES('20', 'E341');
INSERT INTO Creates VALUES('22', 'E100');
INSERT INTO Creates VALUES('18', 'D111');
INSERT INTO Creates VALUES('18', 'D231');
INSERT INTO Creates VALUES('2', 'D231');
INSERT INTO Creates VALUES('24', 'D111');
INSERT INTO Creates VALUES('24', 'D231');
As we can see, actually the correct output should be ID 2 and 24.
This what I have now to make it true, but I don't think this correct, so I would like to hear from anyone or any suggestion that can help me with it, thank you in advance.
SELECT DISTINCT ID
FROM Creates
WHERE PRODUCTID = ALL (SELECT PRODUCTID FROM Creates WHERE ID = '18')
ORDER BY ID ASC
;
sql database oracle
add a comment |
(SQL rookie question) I'm Working on a query which could find all the Worker who create products that include all the products created by Worker with id = 18.
CREATE TABLE Creates(
ID CHAR(10),
PRODUCTID CHAR(10),
PRIMARY KEY (ID, PRODUCTID),
FOREIGN KEY(ID) REFERENCES Worker(ID) ON DELETE CASCADE,
};
CREATE TABLE Worker(
ID CHAR(10) PRIMARY KEY,
};
Here are what have in my table Creates now:
INSERT INTO Creates VALUES('2', 'S100');
INSERT INTO Creates VALUES('2', 'D111');
INSERT INTO Creates VALUES('4', 'D111');
INSERT INTO Creates VALUES('4', 'S119');
INSERT INTO Creates VALUES('6', 'S2');
INSERT INTO Creates VALUES('6', 'D231');
INSERT INTO Creates VALUES('8', 'S103');
INSERT INTO Creates VALUES('10', 'S109');
INSERT INTO Creates VALUES('12', 'S189');
INSERT INTO Creates VALUES('14', 'S982');
INSERT INTO Creates VALUES('20', 'E341');
INSERT INTO Creates VALUES('22', 'E100');
INSERT INTO Creates VALUES('18', 'D111');
INSERT INTO Creates VALUES('18', 'D231');
INSERT INTO Creates VALUES('2', 'D231');
INSERT INTO Creates VALUES('24', 'D111');
INSERT INTO Creates VALUES('24', 'D231');
As we can see, actually the correct output should be ID 2 and 24.
This what I have now to make it true, but I don't think this correct, so I would like to hear from anyone or any suggestion that can help me with it, thank you in advance.
SELECT DISTINCT ID
FROM Creates
WHERE PRODUCTID = ALL (SELECT PRODUCTID FROM Creates WHERE ID = '18')
ORDER BY ID ASC
;
sql database oracle
add a comment |
(SQL rookie question) I'm Working on a query which could find all the Worker who create products that include all the products created by Worker with id = 18.
CREATE TABLE Creates(
ID CHAR(10),
PRODUCTID CHAR(10),
PRIMARY KEY (ID, PRODUCTID),
FOREIGN KEY(ID) REFERENCES Worker(ID) ON DELETE CASCADE,
};
CREATE TABLE Worker(
ID CHAR(10) PRIMARY KEY,
};
Here are what have in my table Creates now:
INSERT INTO Creates VALUES('2', 'S100');
INSERT INTO Creates VALUES('2', 'D111');
INSERT INTO Creates VALUES('4', 'D111');
INSERT INTO Creates VALUES('4', 'S119');
INSERT INTO Creates VALUES('6', 'S2');
INSERT INTO Creates VALUES('6', 'D231');
INSERT INTO Creates VALUES('8', 'S103');
INSERT INTO Creates VALUES('10', 'S109');
INSERT INTO Creates VALUES('12', 'S189');
INSERT INTO Creates VALUES('14', 'S982');
INSERT INTO Creates VALUES('20', 'E341');
INSERT INTO Creates VALUES('22', 'E100');
INSERT INTO Creates VALUES('18', 'D111');
INSERT INTO Creates VALUES('18', 'D231');
INSERT INTO Creates VALUES('2', 'D231');
INSERT INTO Creates VALUES('24', 'D111');
INSERT INTO Creates VALUES('24', 'D231');
As we can see, actually the correct output should be ID 2 and 24.
This what I have now to make it true, but I don't think this correct, so I would like to hear from anyone or any suggestion that can help me with it, thank you in advance.
SELECT DISTINCT ID
FROM Creates
WHERE PRODUCTID = ALL (SELECT PRODUCTID FROM Creates WHERE ID = '18')
ORDER BY ID ASC
;
sql database oracle
(SQL rookie question) I'm Working on a query which could find all the Worker who create products that include all the products created by Worker with id = 18.
CREATE TABLE Creates(
ID CHAR(10),
PRODUCTID CHAR(10),
PRIMARY KEY (ID, PRODUCTID),
FOREIGN KEY(ID) REFERENCES Worker(ID) ON DELETE CASCADE,
};
CREATE TABLE Worker(
ID CHAR(10) PRIMARY KEY,
};
Here are what have in my table Creates now:
INSERT INTO Creates VALUES('2', 'S100');
INSERT INTO Creates VALUES('2', 'D111');
INSERT INTO Creates VALUES('4', 'D111');
INSERT INTO Creates VALUES('4', 'S119');
INSERT INTO Creates VALUES('6', 'S2');
INSERT INTO Creates VALUES('6', 'D231');
INSERT INTO Creates VALUES('8', 'S103');
INSERT INTO Creates VALUES('10', 'S109');
INSERT INTO Creates VALUES('12', 'S189');
INSERT INTO Creates VALUES('14', 'S982');
INSERT INTO Creates VALUES('20', 'E341');
INSERT INTO Creates VALUES('22', 'E100');
INSERT INTO Creates VALUES('18', 'D111');
INSERT INTO Creates VALUES('18', 'D231');
INSERT INTO Creates VALUES('2', 'D231');
INSERT INTO Creates VALUES('24', 'D111');
INSERT INTO Creates VALUES('24', 'D231');
As we can see, actually the correct output should be ID 2 and 24.
This what I have now to make it true, but I don't think this correct, so I would like to hear from anyone or any suggestion that can help me with it, thank you in advance.
SELECT DISTINCT ID
FROM Creates
WHERE PRODUCTID = ALL (SELECT PRODUCTID FROM Creates WHERE ID = '18')
ORDER BY ID ASC
;
sql database oracle
sql database oracle
asked Nov 16 '18 at 23:01
user548976user548976
193
193
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
This:
SELECT ID
FROM
(SELECT *
FROM Creates
WHERE PRODUCTID IN (SELECT PRODUCTID FROM Creates WHERE ID = '18')
AND (ID <> '18')
) AS t
GROUP BY ID
HAVING COUNT(*) = (SELECT COUNT(*) FROM Creates WHERE ID = '18')
returns
2
24
As you can see, the Worker
table is not involved at all.
The results are retrieved from Creates
table by selecting the ids of the workers that have produced products that the worker with id '18'
only if their number is equal to the number of the products that the worker with id '18'
has produced.
This is a good approach. It is easy to read and it avoids the expensive cross join typically found in "Relational division".
– Ronnis
Nov 17 '18 at 1:05
add a comment |
First you need a list of all products created by worker 18
SELECT product_id FROM Creates WHERE ID = '18'
Then you need a list of all employees
SELECT ID as worker_id FROM Workers WHERE ID <> '18'
Now you create a cartesian product of both results to have a list of all possible combinations
WITH products as (
SELECT product_id FROM Creates WHERE ID = '18'
), employees as (
SELECT ID as worker_id FROM Workers WHERE ID <> '18'
)
SELECT product_id, worker_id
FROM products
CROSS JOIN employees
Now you have to find if an employees have every product so you check with the Creates Table
WITH products as (
SELECT product_id FROM Creates WHERE ID = '18'
), employees as (
SELECT ID as worker_id FROM Workers WHERE ID <> '18'
), allMatches as (
SELECT product_id, worker_id
FROM products
CROSS JOIN employees
)
SELECT A.worker_id
FROM allMatches A
LEFT JOIN Creates C
ON A.product_id = C.product_id
AND A.worker_id = C.worker_id
GROUP BY A.worker_id
HAVING COUNT(*) = COUNT(C.product_id)
if a worker doesnt create a product the LEFT JOIN
will create NULL on the match. And COUNT(C.product_id)
doesnt count nulls
add a comment |
Probably the simplest method uses listagg()
:
select c.id,
listagg(c.productid, ',') within group (order by c.productid) as products
from creates c join
creates c18
on c18.productid = c.productid and
c18.id = 18 and
c.id <> 18
group by c.id
having products = (select listagg(c.productid, ',') within group (order by c.productid) as products
from creates c
where c.id = 18
);
Interesting aproach. But who is c18p? and if is a typo how the alias become c18
– Juan Carlos Oropeza
Nov 17 '18 at 6:51
@JuanCarlosOropeza . . . That should just be a reference toproducts
.
– Gordon Linoff
Nov 17 '18 at 20:32
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53346501%2fone-example-involves-manipulation-of-select-statement-in-sql%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
This:
SELECT ID
FROM
(SELECT *
FROM Creates
WHERE PRODUCTID IN (SELECT PRODUCTID FROM Creates WHERE ID = '18')
AND (ID <> '18')
) AS t
GROUP BY ID
HAVING COUNT(*) = (SELECT COUNT(*) FROM Creates WHERE ID = '18')
returns
2
24
As you can see, the Worker
table is not involved at all.
The results are retrieved from Creates
table by selecting the ids of the workers that have produced products that the worker with id '18'
only if their number is equal to the number of the products that the worker with id '18'
has produced.
This is a good approach. It is easy to read and it avoids the expensive cross join typically found in "Relational division".
– Ronnis
Nov 17 '18 at 1:05
add a comment |
This:
SELECT ID
FROM
(SELECT *
FROM Creates
WHERE PRODUCTID IN (SELECT PRODUCTID FROM Creates WHERE ID = '18')
AND (ID <> '18')
) AS t
GROUP BY ID
HAVING COUNT(*) = (SELECT COUNT(*) FROM Creates WHERE ID = '18')
returns
2
24
As you can see, the Worker
table is not involved at all.
The results are retrieved from Creates
table by selecting the ids of the workers that have produced products that the worker with id '18'
only if their number is equal to the number of the products that the worker with id '18'
has produced.
This is a good approach. It is easy to read and it avoids the expensive cross join typically found in "Relational division".
– Ronnis
Nov 17 '18 at 1:05
add a comment |
This:
SELECT ID
FROM
(SELECT *
FROM Creates
WHERE PRODUCTID IN (SELECT PRODUCTID FROM Creates WHERE ID = '18')
AND (ID <> '18')
) AS t
GROUP BY ID
HAVING COUNT(*) = (SELECT COUNT(*) FROM Creates WHERE ID = '18')
returns
2
24
As you can see, the Worker
table is not involved at all.
The results are retrieved from Creates
table by selecting the ids of the workers that have produced products that the worker with id '18'
only if their number is equal to the number of the products that the worker with id '18'
has produced.
This:
SELECT ID
FROM
(SELECT *
FROM Creates
WHERE PRODUCTID IN (SELECT PRODUCTID FROM Creates WHERE ID = '18')
AND (ID <> '18')
) AS t
GROUP BY ID
HAVING COUNT(*) = (SELECT COUNT(*) FROM Creates WHERE ID = '18')
returns
2
24
As you can see, the Worker
table is not involved at all.
The results are retrieved from Creates
table by selecting the ids of the workers that have produced products that the worker with id '18'
only if their number is equal to the number of the products that the worker with id '18'
has produced.
edited Nov 17 '18 at 0:02
answered Nov 16 '18 at 23:52
forpasforpas
10.6k2423
10.6k2423
This is a good approach. It is easy to read and it avoids the expensive cross join typically found in "Relational division".
– Ronnis
Nov 17 '18 at 1:05
add a comment |
This is a good approach. It is easy to read and it avoids the expensive cross join typically found in "Relational division".
– Ronnis
Nov 17 '18 at 1:05
This is a good approach. It is easy to read and it avoids the expensive cross join typically found in "Relational division".
– Ronnis
Nov 17 '18 at 1:05
This is a good approach. It is easy to read and it avoids the expensive cross join typically found in "Relational division".
– Ronnis
Nov 17 '18 at 1:05
add a comment |
First you need a list of all products created by worker 18
SELECT product_id FROM Creates WHERE ID = '18'
Then you need a list of all employees
SELECT ID as worker_id FROM Workers WHERE ID <> '18'
Now you create a cartesian product of both results to have a list of all possible combinations
WITH products as (
SELECT product_id FROM Creates WHERE ID = '18'
), employees as (
SELECT ID as worker_id FROM Workers WHERE ID <> '18'
)
SELECT product_id, worker_id
FROM products
CROSS JOIN employees
Now you have to find if an employees have every product so you check with the Creates Table
WITH products as (
SELECT product_id FROM Creates WHERE ID = '18'
), employees as (
SELECT ID as worker_id FROM Workers WHERE ID <> '18'
), allMatches as (
SELECT product_id, worker_id
FROM products
CROSS JOIN employees
)
SELECT A.worker_id
FROM allMatches A
LEFT JOIN Creates C
ON A.product_id = C.product_id
AND A.worker_id = C.worker_id
GROUP BY A.worker_id
HAVING COUNT(*) = COUNT(C.product_id)
if a worker doesnt create a product the LEFT JOIN
will create NULL on the match. And COUNT(C.product_id)
doesnt count nulls
add a comment |
First you need a list of all products created by worker 18
SELECT product_id FROM Creates WHERE ID = '18'
Then you need a list of all employees
SELECT ID as worker_id FROM Workers WHERE ID <> '18'
Now you create a cartesian product of both results to have a list of all possible combinations
WITH products as (
SELECT product_id FROM Creates WHERE ID = '18'
), employees as (
SELECT ID as worker_id FROM Workers WHERE ID <> '18'
)
SELECT product_id, worker_id
FROM products
CROSS JOIN employees
Now you have to find if an employees have every product so you check with the Creates Table
WITH products as (
SELECT product_id FROM Creates WHERE ID = '18'
), employees as (
SELECT ID as worker_id FROM Workers WHERE ID <> '18'
), allMatches as (
SELECT product_id, worker_id
FROM products
CROSS JOIN employees
)
SELECT A.worker_id
FROM allMatches A
LEFT JOIN Creates C
ON A.product_id = C.product_id
AND A.worker_id = C.worker_id
GROUP BY A.worker_id
HAVING COUNT(*) = COUNT(C.product_id)
if a worker doesnt create a product the LEFT JOIN
will create NULL on the match. And COUNT(C.product_id)
doesnt count nulls
add a comment |
First you need a list of all products created by worker 18
SELECT product_id FROM Creates WHERE ID = '18'
Then you need a list of all employees
SELECT ID as worker_id FROM Workers WHERE ID <> '18'
Now you create a cartesian product of both results to have a list of all possible combinations
WITH products as (
SELECT product_id FROM Creates WHERE ID = '18'
), employees as (
SELECT ID as worker_id FROM Workers WHERE ID <> '18'
)
SELECT product_id, worker_id
FROM products
CROSS JOIN employees
Now you have to find if an employees have every product so you check with the Creates Table
WITH products as (
SELECT product_id FROM Creates WHERE ID = '18'
), employees as (
SELECT ID as worker_id FROM Workers WHERE ID <> '18'
), allMatches as (
SELECT product_id, worker_id
FROM products
CROSS JOIN employees
)
SELECT A.worker_id
FROM allMatches A
LEFT JOIN Creates C
ON A.product_id = C.product_id
AND A.worker_id = C.worker_id
GROUP BY A.worker_id
HAVING COUNT(*) = COUNT(C.product_id)
if a worker doesnt create a product the LEFT JOIN
will create NULL on the match. And COUNT(C.product_id)
doesnt count nulls
First you need a list of all products created by worker 18
SELECT product_id FROM Creates WHERE ID = '18'
Then you need a list of all employees
SELECT ID as worker_id FROM Workers WHERE ID <> '18'
Now you create a cartesian product of both results to have a list of all possible combinations
WITH products as (
SELECT product_id FROM Creates WHERE ID = '18'
), employees as (
SELECT ID as worker_id FROM Workers WHERE ID <> '18'
)
SELECT product_id, worker_id
FROM products
CROSS JOIN employees
Now you have to find if an employees have every product so you check with the Creates Table
WITH products as (
SELECT product_id FROM Creates WHERE ID = '18'
), employees as (
SELECT ID as worker_id FROM Workers WHERE ID <> '18'
), allMatches as (
SELECT product_id, worker_id
FROM products
CROSS JOIN employees
)
SELECT A.worker_id
FROM allMatches A
LEFT JOIN Creates C
ON A.product_id = C.product_id
AND A.worker_id = C.worker_id
GROUP BY A.worker_id
HAVING COUNT(*) = COUNT(C.product_id)
if a worker doesnt create a product the LEFT JOIN
will create NULL on the match. And COUNT(C.product_id)
doesnt count nulls
answered Nov 16 '18 at 23:47
Juan Carlos OropezaJuan Carlos Oropeza
36.1k63876
36.1k63876
add a comment |
add a comment |
Probably the simplest method uses listagg()
:
select c.id,
listagg(c.productid, ',') within group (order by c.productid) as products
from creates c join
creates c18
on c18.productid = c.productid and
c18.id = 18 and
c.id <> 18
group by c.id
having products = (select listagg(c.productid, ',') within group (order by c.productid) as products
from creates c
where c.id = 18
);
Interesting aproach. But who is c18p? and if is a typo how the alias become c18
– Juan Carlos Oropeza
Nov 17 '18 at 6:51
@JuanCarlosOropeza . . . That should just be a reference toproducts
.
– Gordon Linoff
Nov 17 '18 at 20:32
add a comment |
Probably the simplest method uses listagg()
:
select c.id,
listagg(c.productid, ',') within group (order by c.productid) as products
from creates c join
creates c18
on c18.productid = c.productid and
c18.id = 18 and
c.id <> 18
group by c.id
having products = (select listagg(c.productid, ',') within group (order by c.productid) as products
from creates c
where c.id = 18
);
Interesting aproach. But who is c18p? and if is a typo how the alias become c18
– Juan Carlos Oropeza
Nov 17 '18 at 6:51
@JuanCarlosOropeza . . . That should just be a reference toproducts
.
– Gordon Linoff
Nov 17 '18 at 20:32
add a comment |
Probably the simplest method uses listagg()
:
select c.id,
listagg(c.productid, ',') within group (order by c.productid) as products
from creates c join
creates c18
on c18.productid = c.productid and
c18.id = 18 and
c.id <> 18
group by c.id
having products = (select listagg(c.productid, ',') within group (order by c.productid) as products
from creates c
where c.id = 18
);
Probably the simplest method uses listagg()
:
select c.id,
listagg(c.productid, ',') within group (order by c.productid) as products
from creates c join
creates c18
on c18.productid = c.productid and
c18.id = 18 and
c.id <> 18
group by c.id
having products = (select listagg(c.productid, ',') within group (order by c.productid) as products
from creates c
where c.id = 18
);
edited Nov 17 '18 at 20:32
answered Nov 17 '18 at 2:02
Gordon LinoffGordon Linoff
765k35296400
765k35296400
Interesting aproach. But who is c18p? and if is a typo how the alias become c18
– Juan Carlos Oropeza
Nov 17 '18 at 6:51
@JuanCarlosOropeza . . . That should just be a reference toproducts
.
– Gordon Linoff
Nov 17 '18 at 20:32
add a comment |
Interesting aproach. But who is c18p? and if is a typo how the alias become c18
– Juan Carlos Oropeza
Nov 17 '18 at 6:51
@JuanCarlosOropeza . . . That should just be a reference toproducts
.
– Gordon Linoff
Nov 17 '18 at 20:32
Interesting aproach. But who is c18p? and if is a typo how the alias become c18
– Juan Carlos Oropeza
Nov 17 '18 at 6:51
Interesting aproach. But who is c18p? and if is a typo how the alias become c18
– Juan Carlos Oropeza
Nov 17 '18 at 6:51
@JuanCarlosOropeza . . . That should just be a reference to
products
.– Gordon Linoff
Nov 17 '18 at 20:32
@JuanCarlosOropeza . . . That should just be a reference to
products
.– Gordon Linoff
Nov 17 '18 at 20:32
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53346501%2fone-example-involves-manipulation-of-select-statement-in-sql%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown