我有三张桌子:
(结构域)
+----+-----+
| id |title|
+----+-----+
| 1 | com |
+----+-----+
| 2 | net |
+----+-----+
(板坯)
+----+-----+
| id |title|
+----+-----+
| 1 |str1 |
+----+-----+
| 2 |str2 |
+----+-----+
(价格)
+----+------+--------+
| id |slabid|domainId|
+----+------+--------+
empty
这是我的查询:
SELECT
prices.*,
FROM
prices
RIGHT JOIN domains ON domains.id=prices.domainId
JOIN slabs ON slabs.id=prices.slabId
我应该如何通过域名和列表进行查询?平板行...
,结果应该是这样的:
+----+------+--------+
| id |slabid|domainId|
+----+------+--------+
| 1 |1 |1 |
+----+------+--------+
| 2 |2 |1 |
+----+------+--------+
| 3 |1 |2 |
+----+------+--------+
| 4 |2 |2 |
+----+------+--------+
但事实并非如此。
答案 0 :(得分:5)
INNER JOIN
足以满足您的需求。如果表prices
上的某个字段是 nullable ,并且您希望在表上显示所有记录是否在另一个表上有匹配的行,请使用LEFT JOIN
INNER JOIN
只会在每张桌子上至少有一个匹配时显示记录。而另一方面,LEFT JOIN
将显示左侧上的所有行,无论其他表上是否匹配或匹配。
SELECT a.*,
b.title domainTitle,
c.title slabsTitle
FROM prices a
INNER JOIN domain b
ON a.domainID = b.id
INNER JOIN slab c
ON a.slabID = c.ID
要进一步了解联接,请访问以下链接:
更新1
您需要使用CROSS JOIN
,因为您需要两个表的产品,假设您要将其插入表prices
并且ID
是 Identity < / em>或AUTO_INCREMENTed
列,
INSERT INTO prices (slabid, domainid)
SELECT b.ID as slabID, a.ID as domanID
FROM domains a
CROSS JOIN slabs b
如果表格价格上的列ID
未自动增加且您使用的是mysql
,请使用变量来保持值的增量,
SELECT @ID:=@ID+1 ID,
b.ID as slabID,
a.ID as domanID
FROM domains a
CROSS JOIN slabs b
CROSS JOIN (SELECT @ID:=0) s
答案 1 :(得分:0)
只需与 SLABS 表交叉加入 DOMAINS 即可。不知道为什么PRICES表在这里起作用,因为你只想用DOMABS表中的行来排列DOMAINS表中的行。