#sql #database #select #ado.net
#sql #База данных #выберите #ado.net
Вопрос:
Привет, я включил изображение своих таблиц, то, что я хочу сделать, находится select top 6 from product detail whose state=1
в состоянии feauture. Любая помощь будет оценена. Я думал о чем-то вроде:
Select TOP 6 [productName] As test, [productDetail] AS test1
From [productDetail]
INNER JOIN test ON productDetail.makeID = feautureState.makeID
Where feautureState.state='1';
но это не работает: (
Комментарии:
1. Сообщение 208, уровень 16, состояние 1, строка 1 Недопустимое имя объекта ‘test’.
2. привет, попробуйте вызвать таблицы как
dbo.tablename
в запросе3. Ваше внутреннее соединение относится к «тестовому» объекту, который вы не указали на схеме. Это ошибка при «очистке» этого запроса или это то, что вы на самом деле запускаете? Если это последнее, то в этом ваша проблема; вероятно, это должно быть «featureState».
Ответ №1:
присоединяется к имени таблицы, а не к имени столбца
Select TOP 6 [productName] As test, [productDetail] AS test1
From [productDetail]
JOIN [featureState] ON productDetail.makeID=feautureState.makeID
Where feautureState.state='1';
Комментарии:
1. почему вы использовали join вместо innerjoin
2. они функционально эквивалентны. в этом случае вы можете использовать либо join, либо inner join
3. «Внутренний» и «Внешний» являются непостижимыми ключевыми словами; «Соединение» подразумевается как «Внутреннее соединение», в то время как «Левое соединение» эквивалентно «Левому внешнему соединению».
4. я все еще неясен в этом мире объединения, можете ли вы предоставить мне простейший пример или новое руководство, которое может прояснить мою концепцию, заранее спасибо 🙂
Ответ №2:
это должно сработать.
кроме того, является ли state строкой или целым числом?
Select top 6 pd.ProductName,pd.ProductDetail
from dbo.ProductDetail pd
inner join dbo.FeatureState fs on pd.makeid=fs.makeid
where fs.state=1
Ответ №3:
Select top 6 pd.productName, pd.productDetail
from productDetail pd
Inner Join feautureState fs on fs.makeID = pd.makeID
where fs.state = 1
Ответ №4:
SELECT TOP 6
pd.productName,
pd.productDetail
FROM dbo.productDetail pd
INNER JOIN dbo.featureState fs on fs.makeID = pd.makeID
WHERE fs.makeID = 1
Ответ №5:
ВНУТРЕННЕЕ СОЕДИНЕНИЕ «test» -> это не таблица
Ответ №6:
Ваше внутреннее соединение относится к «тестовому» объекту, который вы не указали на схеме. Это ошибка при «очистке» этого запроса или это то, что вы на самом деле запускаете? Если это последнее, то в этом ваша проблема; вероятно, это должно быть «featureState».
Ответ №7:
В вашем внутреннем соединении должно быть указано имя таблицы, к которой вы присоединяетесь. Кроме того, я предполагаю, что state — это int, а не varchar , поэтому кавычки не нужны.
Select TOP 6 [productName], [productDetail]
From [productDetail]
INNER JOIN featureState ON productDetail.makeID = feautureState.makeID
Where feautureState.state = 1;
Ответ №8:
Как говорили другие, вы можете исправить свой запрос следующим образом.
SELECT TOP 6 [productName] As test, [productDetail] AS test1
FROM [productDetail]
INNER JOIN featureState ON productDetail.makeID = feautureState.makeID
WHERE feautureState.state='1';
Однако вам необходимо указать ORDER BY
предложение, иначе результаты, которые вы получите, будут непредсказуемыми.
Также из вашей схемы следует, что у вас есть однозначная связь с ProductDetail
и FeatureState
, возможно, флаг состояния должен быть столбцом в вашей ProductDetail
таблице? Но возможно, что вы предоставляете только упрощенную версию своей базы данных.
Редактировать —- В ответ на комментарии.
Чтобы добавить столбец в существующую таблицу, предполагая, что у вас есть данные.
ALTER TABLE ProductDetail
ADD FeatureState BIT NULL
Или вы можете установить значение not null и указать значение по умолчанию для всех существующих строк
ALTER TABLE ProductDetail
ADD FeatureState BIT NOT NULL CONSTRAINT [DF_ProductDetail_FeatureState] DEFAULT (0)
Комментарии:
1. Ну, я не включил столбец state в сведения о продукте, я установил связь между этими двумя таблицами и установил для свойства insert значение cascade , чтобы при добавлении нового продукта таблица feauturestate также обновлялась, это правильный способ сделать это
2. Если у одного продукта есть флаг состояния единственной функции, тогда нет необходимости во второй таблице и связи FK. Просто добавьте столбец featurestate в свою таблицу productdetail.
3. хорошо, thnx сделает это, еще одна вещь, есть ли какой-либо простой способ добавления столбца в текущую таблицу, потому что тогда мне придется удалить все и воссоздать таблицу заново, и скопировать все ячейки плюс удалить relationshops.
4. Я исправил ответ, это должно упростить ваш запрос.
5. спасибо большое.. Хотел бы я, чтобы в университете думали, что все эти вещи ,, программирование — это самообучение ..
Ответ №9:
Приведенное ниже утверждение является одним из решений вашей проблемы.
Выберите Top 6 * из dbo.ProductDetail, в котором указан makelid (Выберите makelid из dbo.feautureState, где State = 1)